//
给你一个整数 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]
//
//
//
//
//提示:
//
//
//
👍 277👎 0
package leetcode.editor.cn;
import java.util.ArrayList;
import java.util.List;
// 386:字典序排数
public class LexicographicalNumbers {
public static void main(String[] args) {
Solution solution = new LexicographicalNumbers().new Solution();
// TO TEST
solution.lexicalOrder(13);
}
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public List lexicalOrder(int n) {
dfs(n, 1);
return list;
}
List list = new ArrayList<>();
private void dfs(int n, int num) {
if (num > n) {
return;
}
list.add(num);
dfs(n, num * 10);
if (num % 10 == 0 || num == 1) {
int max = (num / 10 + 1) * 10;
for (int i = num + 1; i < max; i++) {
dfs(n, i);
}
}
}
}
//leetcode submit region end(Prohibit modification and deletion)
}