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

请帮助我改进我的解决方案以适应所有测试用例。

回答

ifindNumbers. 改成:

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;
}


以上是C-查找偶数位数的数字的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>