LeetCode 解題練習:Find Numbers with Even Number of Digits

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

If you like this post, please click the ads on the blog or buy me a coffee. Thank you very much.

題目原文描述 https://leetcode.com/problems/find-numbers-with-even-number-of-digits/

中文描述

給一個整數陣列 nums ,找出這些整數中有多少個數字的位數是偶數。


限制條件:

  • 1 <= nums.length <= 500
  • 1 <= nums[i] <= 100000

範例一:

輸入 nums = [1, 12, 123, 1234, 11111, 13579] 

輸出  2

因為 

1 有一位數

12 有兩位數

123 有三位數

1234 有四位數

11111 有五位數

13579 有五位數

只有 12 和 1234 有偶數位數。


解法一:

用整數除法除以 10 算出每個數字的位數。


Python Code

class Solution:
    # count the number's digits
    def countDigits(self, n):
        digits = 0
        while n > 0:
            digits = digits + 1
            n = n // 10 # 整數除法
       
        return digits

    def findNumbers(self, nums: List[int]) -> int:
        evenCnt = 0
        for n in nums:
            if self.countDigits(n) % 2 == 0:
                evenCnt = evenCnt + 1
       
        return evenCnt

解法二

將數字轉換成字串,判斷字串的長度是否為偶數。


Python Code

class Solution:
    def findNumbers(self, nums: List[int]) -> int:
        evenCnt = 0
        for n in nums:
            n = str(n) # 轉成字串
            if len(n) % 2 == 0: # 取得字串長度
                evenCnt = evenCnt + 1
       
        return evenCnt


解法三:

對整數 n 取對數 log10 後再加 1 ,再取此值的整數部分。


Python Code

import math
class Solution:
    def findNumbers(self, nums: List[int]) -> int:
        evenCnt = 0
        for n in nums:
            n = int(math.log10(n)) + 1 # 取對數 log10
            if n % 2 == 0:
                evenCnt = evenCnt + 1
       
        return evenCnt


解法四:

使用條件範圍限制。因為此題數值的範圍為 1 <= nums[i] <= 100000,所以可以用 if/elif/else 來計算位數。

數字範圍在底下之一:

  • 10 <= n <= 99
  • 1000 <= n <= 9999
  • 100000 <= n

皆符合題目要求。


Python Code

class Solution:
    def findNumbers(self, nums: List[int]) -> int:
        evenCnt = 0
        for n in nums:
            if n == 100000 \
            or (n >= 10 and n <= 99) \
            or (n >= 1000 and n <= 9999):
                evenCnt = evenCnt + 1
       
        return evenCnt


沒有留言: