2022-03-31 「728. 自除数」

2022-03-31  本文已影响0人  柠香萌萌鸡

今日简单题找回自信:https://leetcode-cn.com/problems/self-dividing-numbers/
遍历找数的思路,没有什么难度,关键在使用while循环对数字做分解「i % (tmp % 10) != 0」,要记得除数「tmp % 10」不能为0,算一种异常场景的考虑。

看了下宫水大佬的解法,果然我的写法还是不够简洁。
此处记录下continue的用法:

  1. 一般的continue会退回最内层循环的开头(顶部),并继续执行
  2. 带标签的continue会达到标签的位置,并重新进入紧接在那个标签后面的循环

宫水的写法,可以快速返回标签部分,不像我还要用一个flag去记录。

class Solution {
    public List<Integer> selfDividingNumbers(int left, int right) {
        List<Integer> ans = new ArrayList<>();
        out:for (int i = left; i <= right; i++) {
            int cur = i;
            while (cur != 0) {
                int t = cur % 10;
                if (t == 0 || i % t != 0) continue out;
                cur /= 10;
            }
            ans.add(i);
        }
        return ans;
    }
}

作者:AC_OIer
链接:https://leetcode-cn.com/problems/self-dividing-numbers/solution/by-ac_oier-pvb1/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

我的啰嗦写法:

class Solution {
    public List<Integer> selfDividingNumbers(int left, int right) {
        List<Integer> ans = new ArrayList<Integer>();
        for(int i=left; i<=right; i++) {
            int tmp = i;
            int flag = 0;
            while(tmp != 0) {
                // 除数不能为0
                if (tmp % 10 ==0) {
                    flag = 1;
                    break;
                }
                else if (i % (tmp % 10) != 0) {
                    flag = 1;
                    break;
                }
                tmp /=10;
            }
            if (flag == 0) {
                ans.add(i);
            }
        }
        return ans;
    }
}
上一篇下一篇

猜你喜欢

热点阅读