题目描述
给你一个整数 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
代码:
package dayLeetCode;
import java.util.ArrayList;
import java.util.List;
public class dayleetcode386 {
/**
* 深搜
*
* 0
* 1 2 3 ... 对应 1 2 3 4 ...
* 0 1 2 3 ... 对应 10 11 12 13 ... 98 99
* ...... 对应 100 101 ... 998 999
*/
List<Integer> ansList = new ArrayList<>();
public List<Integer> lexicalOrder(int n) {
// 第一位只能有1~9 9种情况
for (int i = 1; i<= 9; i++)
dfs(i , n);
return ansList;
}
private void dfs(int cur, int n) {
// 递归结束条件
if (cur > n)
return;
ansList.add(cur);
// 除去第一位,其他位有0~9 10种情况
for (int i = 0; i <= 9; i++){
dfs(cur * 10 + i, n);
}
}
public static void main(String[] args) {
dayleetcode386 obj = new dayleetcode386();
System.out.println(obj.lexicalOrder(13));
}
}