- μ§μ λ λ²μ
[low, high]
μ μνλ μ«μ μ€ κ° μ리μ μ«μκ° μ°μλλ μμ λͺ©λ‘μ ꡬνλ λ¬Έμ . - μλ₯Ό λ€λ©΄ 3μ리μ μ«μ μ€μλ
123, 234, 345, 456, 567, 678, 789
κ° μμ μ μλ€.
- λ¨Όμ λ²μ μ€ κ°μ₯ μμ μ«μ, ν° μ«μμ μ리μ
minDigits
, maxDigits
λ₯Ό μΈμ΄μ μ μ₯νλ€.
- μ«μμ μ리μ λ²μλ₯Ό μννλ©΄μ 쑰건μ λ§μ‘±νλ μ«μλ₯Ό λ§λ€μ΄λΈλ€.
- (1) νΉμ μ리μ
n
μ λν΄μ 1
λΆν° μ°μλλ μ«μλ₯Ό λ§λ λ€. n = 3
μ΄λΌλ©΄ 123
μ λ§λ λ€.
- (2) μμ리 μλ₯Ό νλμ© λ°μ΄λ΄λ©΄μ μλ‘μ΄ μ«μλ₯Ό λνλ€.
n = 3
μ΄λΌλ©΄ 123 β
1
230 β 230 + 4 β 234
μ κ°μ΄ λ§λ λ€.- μμ리 μλ₯Ό λ°μ΄λ΄λ €λ©΄ λλ¨Έμ§ μ°μ°μ νμ©νλ©΄ λλ€.
n = 3
μ΄λΌλ©΄ mask κ°μ μ΄ λλ©° νμ¬ μ«μκ° 234
λΌκ³ ν λ (234 * 10) % 1000 + 5 = 2340 % 1000 + 5 = 340 + 5 = 345
μ κ°μ΄ λ€μ μ«μλ₯Ό λ§λ€μ΄λΌ μ μλ€.
- (3) λ§μ§λ§ μ리μ μ«μκ°
9
κ° λ λκΉμ§ μ§ννλ€. n = 3
μ΄λΌλ©΄ 789
κ° λ§μ§λ§ μ°μλ μ«μμ΄λ€.
- (4) λ§λ€μ΄λΈ μ«μκ° μ§μ λ λ²μ
[low, high]
μ μνλμ§ νμΈνλ€.
- (1), (2)μ κ³Όμ μ λ³λμ 루νλ‘ νμ΄λΌ μλ μμ§λ§ 그보λ€λ νμ¬ λ§λ€μ΄μ§ μ«μκ° νΉμ μ리μ
n
λ§νΌ λλμ§ νμΈνλ 쑰건문μ μΆκ°νμ¬ λ 루νλ₯Ό ν΅ν©ν μμλ€.
class Solution {
int countDigits(int v) {
int count = 0;
while (v > 0) {
++count;
v /= 10;
}
return count;
}
int createMask(int n) {
int mask = 1;
while (n-- > 0) {
mask *= 10;
}
return mask;
}
public List<Integer> sequentialDigits(int low, int high) {
List<Integer> result = new ArrayList<>();
int minDigits = countDigits(low);
int maxDigits = countDigits(high);
for (int n = minDigits; n <= maxDigits; ++n) {
int mask = createMask(n);
int value = 0;
int digit = 1;
while (digit <= 9) {
value = (value * 10) % mask + digit;
if (digit >= n && value >= low && value <= high) {
result.add(value);
}
++digit;
}
}
return result;
}
}