代码之家  ›  专栏  ›  技术社区  ›  ShraavaniJha

正在尝试计算除以数字的位数-无法通过所有测试用例

  •  0
  • ShraavaniJha  · 技术社区  · 2 年前

    我早些时候在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();
            }
        }
    };
    

    我已经附上了我的代码供参考,请帮我找出我步履蹒跚的地方。

    1 回复  |  直到 2 年前
        1
  •  3
  •   john    2 年前

    问题是你正在改变 num ,但当你做测试时 num % lastdigit == 0 您希望使用的原始值 号码 .

    如果输入为零,则您的代码也将失败,并出现除以零的错误, 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;
        }
    };