LeetCode之1295. 統計位數爲偶數的數字

概要

題目來源鏈接: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;
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章