美文网首页
2022-03-31 「728. 自除数」

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

作者: 柠香萌萌鸡 | 来源:发表于2022-03-31 08:59 被阅读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;
        }
    }
    

    相关文章

      网友评论

          本文标题:2022-03-31 「728. 自除数」

          本文链接:https://www.haomeiwen.com/subject/ckvgjrtx.html