概要
題目來源鏈接:https://leetcode-cn.com/problems/find-numbers-with-even-number-of-digits/
難度:簡單
類型:數組
題目
給你一個整數數組 nums
,請你返回其中位數爲 偶數 的數字的個數。
示例
示例 1:
輸入:nums = [12,345,2,6,7896]
輸出:2
解釋:
12 是 2 位數字(位數爲偶數)
345 是 3 位數字(位數爲奇數)
2 是 1 位數字(位數爲奇數)
6 是 1 位數字 位數爲奇數)
7896 是 4 位數字(位數爲偶數)
因此只有 12 和 7896 是位數爲偶數的數字
示例 2:
輸入:nums = [555,901,482,1771]
輸出:1
解釋:
只有 1771 是位數爲偶數的數字。
提示:
1 <= nums.length <= 500
1 <= nums[i] <= 10^5
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/find-numbers-with-even-number-of-digits
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。
分析
第一種算法是利用數除以10是否等於0來判斷數的位數,個位數/10=0;十位數/10=1,十位數/100=0;百位數/10!=0,百位數/100!=0,百位數/1000==0,故依此來判斷元素的位數。
第二種算法是利用將元素轉換成字符串,然後判斷字符串的長度,即字符串的長度等於數的位數。
第三種算法是根據題目給出的範圍,判斷數是否屬於某個範圍,如個位數就大於等於0,小於10。
第四種算法是利用log10(n)求以10對底的對數。
- log10(1)=0.0
- log10(10)=1.0
- log10(100)=2.0
- log10(1000)=3.0
- log10(10000)=4.0
代碼
Java代碼
第一種算法:
/**
* 統計位數爲偶數的數字
* @param nums 數組
* @return 返回位數爲偶數的數字都多少個
*/
public int findNumbers(int[] nums) {
int i = 0;// 計數器,記錄位數爲偶數的數字的數目
for (int num : nums) {// 循環遍歷數組中的每個元素
int count = 1;// 計數器,記錄當前元素的位數
int k = 10;// 表示十位數
while (num / k != 0) {// 當元素除以k不等於0,判斷當前數的位數
count++;// 將位數加1,如果是個位數,那麼num/k==0,則count=1
k = k * 10;// 繼續判斷是否是百位數
}
if (count % 2 == 0) {// 如果當前數的位數是偶數則count%2==0
i++;// 則計數器加1,否則位數是奇數
}
}
return i;
}
第二種算法:
/**
* 統計位數爲偶數的數字
* @param nums 數組
* @return 返回位數爲偶數的數字都多少個
*/
public int findNumbers(int[] nums){
int count=0;// 計數器,記錄元素的位數是偶數的數字的數目
for (int num : nums) {// 循環遍歷數組中的所有元素
if(String.valueOf(num).length()%2==0){// 將當前元素有int型轉換成字符串,判斷字符串的長度即數字的位數
count++;// 如果字符串的長度是偶數,則該數的位數也是偶數,則計數器加1
}
}
return count;
}
第三種算法:
/**
* 統計位數爲偶數的數字
* @param nums 數組
* @return 返回位數爲偶數的數字都多少個
*/
public int findNumbers(int[] nums) {
int count = 0;// 計數器,記錄元素的位數是偶數的數字的數目
for (int i = 0; i < nums.length; ++i) {// 循環遍歷數組中的每個元素
// 判斷元素是否屬於下面這些範圍,如果是則位數是偶數
if ((nums[i] >= 10 && nums[i] < 100) || (nums[i] >= 1000 && nums[i] < 10000))
count++;
}
return count;
}
第四種算法:
/**
* 統計位數爲偶數的數字
* @param nums 數組
* @return 返回位數爲偶數的數字都多少個
*/
public int findNumbers(int[] nums) {
int count = 0;// 計數器,記錄元素的位數是偶數的數字的數目
for (int i = 0; i < nums.length; ++i) {// 循環遍歷數組中的每個元素
int n=(int)(Math.log10(nums[i])+1);// 表示以10底的對數,根據這個來求數字的位數
if(n%2==0){
count++;
}
}
return count;
}