计算除以数字的不同数字的数量 - 无法通过所有测试用例

问题描述 投票:0回答:1

我之前在Leetcode练习时遇到了这个问题:

给定一个整数 num,返回 num 中除 num 的不同数字的个数。 如果 nums % val == 0,则整数 val 可以整除 nums。

我想出了以下方法,尽管它运行了一些示例测试用例,但当我提交它时,它无法清除诸如 54 之类的测试用例,其中输出应该为 0,但我的代码输出为 1。

class Solution {
public:
    int countDigits(int num) {
        set<int> s;
        while (num > 0)
        {
            int lastdigit = num % 10;
            if (num % lastdigit == 0)
            {
                s.insert(lastdigit);
            }
            num /= 10;
        }
        if (s.empty()) {
            return 0;
        } else {
            return s.size();
        }
    }
};

我已附上我的代码供参考,请帮我找出我在哪里犹豫不决。

c++ math integer modulo digits
1个回答
4
投票

问题是您正在更改

num
,但是当您进行测试
num % lastdigit == 0
时,您希望使用
num
的原始值。

如果输入的数字为零,您的代码也会因被零除错误而失败,如果

num % lastdigit
为零,则
lastdigit
不合法。

也不需要测试空集,如果

s.size()
为空,你认为
s
会返回什么?

这是固定代码

class Solution {
public:
    int countDigits(int num) {
        set<int> s;
        int n = num;
        while (n > 0)
        {
            int lastdigit = n % 10;
            if (lastdigit != 0  && num % lastdigit == 0)
            {
                s.insert(lastdigit);
            }
            n /= 10;
        }
        return s.size();
    }
};

还有一个可能的问题,

44
应该返回什么?如果您认为答案是 2,那么您的代码还有另一个错误,因为 4 不会被添加到集合中两次。如果这是一个问题,您应该使用整数变量来计算位数。像这样

class Solution {
public:
    int countDigits(int num) {
        int count = 0;
        int n = num;
        while (n > 0)
        {
            int lastdigit = n % 10;
            if (lastdigit != 0  && num % lastdigit == 0)
            {
                ++count;
            }
            n /= 10;
        }
        return count;
    }
};
© www.soinside.com 2019 - 2024. All rights reserved.