题目描述
思路
DFS
对于一个整数number,它的下一个字典序整数应该满足一下规则:
- 尝试对number10,如果number10<=n,则number*10是下一个字典序整数;
- 如果number mod 10 = 0 或number+1>n,则说明末尾的数位已经搜索完成,退回上一位,即number=number/10向下取整,直到判断到number mod 10≠9且number+1<=n为止,那么number+1就是下一个字典序整数。
从1开始计算,依次获取下一个字典序整数,加入结果,结束条件为已经获取到n个整数。
Python实现
class Solution:
def lexicalOrder(self, n: int) -> List[int]:
ans = [0] * n
num = 1
for i in range(n):
ans[i] = num
if num * 10 <= n:
num *= 10
else:
while num % 10 == 9 or num + 1 > n:
num //= 10
num += 1
return ans
Java实现
class Solution {
public List<Integer> lexicalOrder(int n) {
List<Integer> ans = new ArrayList<Integer>();
int num = 1;
for (int i = 0; i < n; i++) {
ans.add(num);
if (num * 10 <= n) {
num *= 10;
} else {
while (num % 10 == 9 || num + 1 > n) {
num /= 10;
}
num ++;
}
}
return ans;
}
}