//

给你一个整数 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]
//
// //

 

// //

提示:

// // //
Related Topics
  • 深度优先搜索
  • 字典树

  • 👍 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) }