题目
An integer has sequential digits if and only if each digit in the number is one more than the previous digit.
Return a sorted list of all the integers in the range [low, high] inclusive that have sequential digits.
Example 1:
Input: low = 100, high = 300
Output: [123,234]
Example 2:
Input: low = 1000, high = 13000
Output: [1234,2345,3456,4567,5678,6789,12345]
思路
因为题目要求排序,所以考虑按位数来,low位数<=output位数<=high位数。遍历可能的位数值,再生成该位数下所有的sequential number,从1开头的一直到从10-i开头的(10-i开头的最后一位是9是该位数下最大的sequential number)。
代码
public List<Integer> sequentialDigits(int low, int high) {
List<Integer> result = new LinkedList<>();
for (int i = Math.min(Integer.toString(low).length(), Integer.toString(high).length()); i <= Math.max(Integer.toString(low).length(), Integer.toString(high).length()); i++) {
for (int j = 1; j <= 10 - i; j++) {
sequentialNum(low, high, result, j, i);
}
}
return result;
}
public void sequentialNum(int low, int high, List<Integer> result, int start, int n) {
int num = 0;
for (int i = 0; i < n; i++) {
num *= 10;
num += start;
start++;
}
if (low <= num && num <= high) result.add(num);
}