C-查找偶数位数的数字
我正在leetcode.com 上做一个问题,上面写着
给定一个整数数组 nums,返回其中有多少包含偶数个数字
我试图用 C 解决它
int numDigit(int n);
// returns the amount of odd numbers in the array
int findNumbers(int* nums, int numsSize){
int c = 0;
for(int i = 0; i < numsSize; i++){
if(numDigit(nums[i]) % 2 == 0){
c++;
i++;
}
else{
i++;
}
}
return(c);
}
//using recursion to find the amount of digits in a number
int numDigit(int n){
int d = 0;
while (n > 0){
n = n/10;
d++;
numDigit(n);
}
return(d);
}
使用这种方法,一些测试用例通过,而另一些则失败。失败的测试用例的一个例子是
Input: [555,901,482,1771]
Output: 0
Expected: 1
请帮助我改进我的解决方案以适应所有测试用例。
回答
你i在findNumbers. 改成:
int findNumbers(int* nums, int numsSize){
int c = 0;
for(int i = 0; i < numsSize; i++){
if(numDigit(nums[i]) % 2 == 0){
c++;
}
}
return c;
}
您可以通过num[i]在每次迭代中打印第一件事来轻松发现这一点。
你也有一个很大的不。您i++在 if 语句的两个分支中有相同的语句 ( )。
还有这个问题:
while (n > 0){
n = n/10;
d++;
numDigit(n); // Completely pointless statement
}
您可以删除递归调用,因为它完全没有完成任何事情。如果您想递归地执行此操作,它将如下所示:
int numDigits(int n) {
if(n > 0)
return 1 + numDigits(n/10);
return 0;
}