问题描述
给你一个整数 n ,按字典序返回范围 [1, n] 内所有整数。
你必须设计一个时间复杂度为 O(n) 且使用 O(1) 额外空间的算法。
示例 1:
输入:n = 13
输出:[1,10,11,12,13,2,3,4,5,6,7,8,9]
示例 2:输入:n = 2
输出:[1,2]
提示:
1 <= n <= 5 * 104
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/lexicographical-numbers
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
Java 迭代
class Solution {
public List<Integer> lexicalOrder(int n) {
List<Integer> ans = new ArrayList<>();
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;
}
}
Java 递归
class Solution {
public List<Integer> lexicalOrder(int n) {
List<Integer> ans = new ArrayList<>();
for(int i = 1;i <= 9;i++){
dfs(ans,i,n);
}
return ans;
}
public void dfs(List<Integer> ans,int i,int n){
if(i > n) return;
ans.add(i);
for(int k = 0;k <= 9;k++){
dfs(ans,i * 10 + k,n);
}
}
}