You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Given an array nums of integers, return how many of them contain an even number of digits.
Example 1:
Input: nums = [12,345,2,6,7896]
Output: 2
Explanation: 12 contains 2 digits (even number of digits).
345 contains 3 digits (odd number of digits).
2 contains 1 digit (odd number of digits).
6 contains 1 digit (odd number of digits).
7896 contains 4 digits (even number of digits).
Therefore only 12 and 7896 contain an even number of digits.
Example 2:
Input: nums = [555,901,482,1771]
Output: 1
Explanation:
Only 1771 contains an even number of digits.
Constraints:
1 <= nums.length <= 500
1 <= nums[i] <= 105
这道题给了一个数组,让找出多少个偶数位的数字,所谓偶数位的数字,就是说该多位数要有偶数个位,比如个数位就不是偶数位数字,而十位数就是。其实这道题就是考察如何统计整数的位数,比较简单直接的方法就是进行一个 while 循环,每次都除以 10,直到原数字变为0为止,这样就知道位数了。可以对数组中的每个数字都进行如下的操作,就可以知道是否是偶数位的数字了,参见代码如下:
解法一:
class Solution {
public:
int findNumbers(vector<int>& nums) {
int res = 0;
for (int num : nums) {
int cnt = 0;
while (num > 0) {
++cnt;
num /= 10;
}
res += (cnt % 2 == 0);
}
return res;
}
};
再来看一种比较高级的解法,运用到了对数计算,数字进行以10为底的对数运算,若得到奇数,则表示原数字是偶数位的,这样就省去了 while 循环的操作,可以进行快速的判断,参见代码如下:
解法二:
class Solution {
public:
int findNumbers(vector<int>& nums) {
int res = 0;
for (int num : nums) {
res += (int)log10(num) & 1;
}
return res;
}
};
class Solution {
public:
int findNumbers(vector<int>& nums) {
int res = 0;
for (int num : nums) {
if ((num > 9 && num < 100) || (num > 999 && num < 10000) || num == 100000) ++res;
}
return res;
}
};
Given an array
nums
of integers, return how many of them contain an even number of digits.Example 1:
Example 2:
Constraints:
1 <= nums.length <= 500
1 <= nums[i] <= 105
这道题给了一个数组,让找出多少个偶数位的数字,所谓偶数位的数字,就是说该多位数要有偶数个位,比如个数位就不是偶数位数字,而十位数就是。其实这道题就是考察如何统计整数的位数,比较简单直接的方法就是进行一个 while 循环,每次都除以 10,直到原数字变为0为止,这样就知道位数了。可以对数组中的每个数字都进行如下的操作,就可以知道是否是偶数位的数字了,参见代码如下:
解法一:
再来看一种比较高级的解法,运用到了对数计算,数字进行以10为底的对数运算,若得到奇数,则表示原数字是偶数位的,这样就省去了 while 循环的操作,可以进行快速的判断,参见代码如下:
解法二:
再来看一种涉嫌 cheating 的解法,由于题目中给定了数字的范围,不超过 10^5,那么偶数位的数字其实是有固定的范围的,分别为 [10, 99],[1000, 9999],和 100000,只要对这些范围进行直接判断,就知道是否是偶数位了,参见代码如下:
解法三:
Github 同步地址:
#1295
类似题目:
Finding 3-Digit Even Numbers
参考资料:
https://leetcode.com/problems/find-numbers-with-even-number-of-digits/
https://leetcode.com/problems/find-numbers-with-even-number-of-digits/discuss/521567/C%2B%2B-solution-with-log-and-bit-manipulation
https://leetcode.com/problems/find-numbers-with-even-number-of-digits/discuss/459489/JAVA-solution-with-100-better-space-and-Time
LeetCode All in One 题目讲解汇总(持续更新中...)
(欢迎加入博主的知识星球,博主将及时答疑解惑,并分享刷题经验与总结,快快加入吧~)
喜欢请点赞,疼爱请打赏❤️~.~
微信打赏
|
Venmo 打赏
---|---
The text was updated successfully, but these errors were encountered: