若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。
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
沒有留言:
張貼留言