【LetMeFly】1295.統計位數為偶數的數字:模擬
力扣題目鏈接:https://leetcode.cn/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] <= 105
解題方法一:正常模擬
如何判斷一個(非負)數在十進制下有多少位?
當這個數不為0時拿這個數不斷除以10,并將“數字位數”加一。
依次計算每個元素的位數,判斷是否是偶數。
時空復雜度分析
- 時間復雜度 O ( l e n ( n u m s ) × log ? n u m s [ i ] ) O(len(nums)\times \log nums[i]) O(len(nums)×lognums[i])
- 空間復雜度 O ( 1 ) O(1) O(1)
AC代碼
C++
/** @Author: LetMeFly* @Date: 2025-04-30 17:23:40* @LastEditors: LetMeFly.xyz* @LastEditTime: 2025-04-30 17:25:14*/
#if defined(_WIN32) || defined(__APPLE__)
#include "_[1,2]toVector.h"
#endifclass Solution {
private:inline int getLength(int t) {int ans = 0;while (t) {ans++;t /= 10;}return ans;}
public:int findNumbers(vector<int>& nums) {int ans = 0;for (int t : nums) {ans += getLength(t) % 2 == 0;}return ans;}
};
Python
'''
Author: LetMeFly
Date: 2025-04-30 17:24:34
LastEditors: LetMeFly.xyz
LastEditTime: 2025-04-30 17:26:24
'''
from typing import Listclass Solution:def findNumbers(self, nums: List[int]) -> int:return sum(len(str(t)) % 2 == 0 for t in nums)
Java
/** @Author: LetMeFly* @Date: 2025-04-30 17:24:37* @LastEditors: LetMeFly.xyz* @LastEditTime: 2025-04-30 17:27:07*/
class Solution {private int getLength(int t) {int ans = 0;while (t > 0) {ans++;t /= 10;}return ans;}public int findNumbers(int[] nums) {int ans = 0;for (int t : nums) {if (getLength(t) % 2 == 0) {ans++;}}return ans;}
}
Go
/** @Author: LetMeFly* @Date: 2025-04-30 17:24:40* @LastEditors: LetMeFly.xyz* @LastEditTime: 2025-04-30 17:28:26*/
func findNumbers(nums []int) (ans int) {for _, t := range nums {cnt := 0for t > 0 {cnt++t /= 10}if cnt % 2 == 0 {ans++}}return
}
解題方法二:一次移除兩位
方法一中我們將元素一次除以10(移除元素的一位),但是問題求的是“元素位數是否為偶數”,那么我們為什么不可以在元素位數大于等于2的時候,一次移除兩位呢?最后看元素剩下一位還是零位不就知道元素十進制下的位數是奇數還是偶數了嗎。
時空復雜度分析
- 時間復雜度 O ( l e n ( n u m s ) × log ? n u m s [ i ] ) O(len(nums)\times \log nums[i]) O(len(nums)×lognums[i])
- 空間復雜度 O ( 1 ) O(1) O(1)
C++
/** @Author: LetMeFly* @Date: 2025-04-30 17:30:12* @LastEditors: LetMeFly.xyz* @LastEditTime: 2025-04-30 17:30:19*/
#if defined(_WIN32) || defined(__APPLE__)
#include "_[1,2]toVector.h"
#endifclass Solution {
public:int findNumbers(vector<int>& nums) {int ans = 0;for (int t : nums) {while (t >= 10) {t /= 100;}ans += t == 0;}return ans;}
};
同步發文于CSDN和我的個人博客,原創不易,轉載經作者同意后請附上原文鏈接哦~
千篇源碼題解已開源