我们定义「顺次数」为:每一位上的数字都比前一位上的数字大 1
的整数。
请你返回由 [low, high]
范围内所有顺次数组成的 有序 列表(从小到大排序)。
示例 1:
输出:low = 100, high = 300 输出:[123,234]
示例 2:
输出:low = 1000, high = 13000 输出:[1234,2345,3456,4567,5678,6789,12345]
提示:
10 <= low <= high <= 10^9
方法一:枚举
我们可以枚举数字的第一位
枚举结束后,我们将答案数组排序并返回即可。
时间复杂度近似
class Solution:
def sequentialDigits(self, low: int, high: int) -> List[int]:
ans = []
for i in range(1, 9):
x = i
for j in range(i + 1, 10):
x = x * 10 + j
if low <= x <= high:
ans.append(x)
return sorted(ans)
class Solution {
public List<Integer> sequentialDigits(int low, int high) {
List<Integer> ans = new ArrayList<>();
for (int i = 1; i < 9; ++i) {
int x = i;
for (int j = i + 1; j < 10; ++j) {
x = x * 10 + j;
if (x >= low && x <= high) {
ans.add(x);
}
}
}
Collections.sort(ans);
return ans;
}
}
class Solution {
public:
vector<int> sequentialDigits(int low, int high) {
vector<int> ans;
for (int i = 1; i < 9; ++i) {
int x = i;
for (int j = i + 1; j < 10; ++j) {
x = x * 10 + j;
if (x >= low && x <= high) {
ans.push_back(x);
}
}
}
sort(ans.begin(), ans.end());
return ans;
}
};
func sequentialDigits(low int, high int) (ans []int) {
for i := 1; i < 9; i++ {
x := i
for j := i + 1; j < 10; j++ {
x = x*10 + j
if low <= x && x <= high {
ans = append(ans, x)
}
}
}
sort.Ints(ans)
return
}
function sequentialDigits(low: number, high: number): number[] {
const ans: number[] = [];
for (let i = 1; i < 9; ++i) {
let x = i;
for (let j = i + 1; j < 10; ++j) {
x = x * 10 + j;
if (x >= low && x <= high) {
ans.push(x);
}
}
}
ans.sort((a, b) => a - b);
return ans;
}