原 LeetCode解题笔记 48 —— 386. 字典序排数
题目
给定一个整数 n, 返回从 1 到 n 的字典顺序。
例如,
给定 n =1 3,返回 [1,10,11,12,13,2,3,4,5,6,7,8,9] 。
请尽可能的优化算法的时间复杂度和空间复杂度。 输入的数据 n 小于等于 5,000,000。
解法
class Solution {
public List<Integer> lexicalOrder(int n) {
List<Integer> list = new ArrayList<>();
for(int i = 1; i < 10; i++){
if(i<=n){
list.add(i);
add(list,n,i);
}else{
break;
}
}
return list;
}
private void add(List<Integer> list, int n, int startNum){
startNum *= 10;
for(int i = 0; i < 10; i++,startNum++){
if(startNum<=n){
list.add(startNum);
add(list, n, startNum);
}else{
return;
}
}
}
}