给你一个整数 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
思路:
1、一共需要判断返回n个数,设置n次循环
2 、循环中,j从1开始放入结果数组
如果j*10<=n,则再放入数组
如果j*10>n则判断j % 10 === 9 || j === n,则末尾位搜索完成,回到上一位j/10向下取整,再j++
3、最终返回结果数组
var lexicalOrder = function(n) {
const res = []
for(let i = 0,j = 1;i < n;i++){
res.push(j)
if(j*10 <= n){
j *= 10
}else{
while(j % 10 === 9 || j === n){
j = parseInt(j / 10)
}
j++
}
}
return res
};
时间复杂度:O(n)
空间复杂度:O(n)