Problem
A self-dividing number is a number that is divisible by every digit it contains.
- For example,
128
is a self-dividing number because128 % 1 == 0
,128 % 2 == 0
, and128 % 8 == 0
.
A self-dividing number is not allowed to contain the digit zero.
Given two integers left
and right
, return **a list of all the *self-dividing numbers* in the range** [left, right]
.
Example 1:
Input: left = 1, right = 22
Output: [1,2,3,4,5,6,7,8,9,11,12,15,22]
Example 2:
Input: left = 47, right = 85
Output: [48,55,66,77]
Constraints:
1 <= left <= right <= 10^4
Solution (Java)
class Solution {
public List<Integer> selfDividingNumbers(final int left, final int right) {
final List<Integer> list = new ArrayList<>();
for (int i = left; i <= right; i++) {
if (isSelfDividing(i)) {
list.add(i);
}
}
return list;
}
private boolean isSelfDividing(int value) {
final int origin = value;
while (value != 0) {
final int digit = value % 10;
value /= 10;
if (digit == 0 || origin % digit != 0) {
return false;
}
}
return true;
}
}
Explain:
nope.
Complexity:
- Time complexity : O(n).
- Space complexity : O(n).