今日简单题找回自信:https://leetcode-cn.com/problems/self-dividing-numbers/
遍历找数的思路,没有什么难度,关键在使用while循环对数字做分解「i % (tmp % 10) != 0」,要记得除数「tmp % 10」不能为0,算一种异常场景的考虑。
看了下宫水大佬的解法,果然我的写法还是不够简洁。
此处记录下continue的用法:
- 一般的continue会退回最内层循环的开头(顶部),并继续执行
- 带标签的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;
}
}
网友评论