给你一个整数 n
,按字典序返回范围 [1, n]
内所有整数。
你必须设计一个时间复杂度为 O(n)
且使用 O(1)
额外空间的算法。
输入: n = 13
输出: [1,10,11,12,13,2,3,4,5,6,7,8,9]
方法:找每个数字的规律
1、num*10<=n:说明在下一排
2、num%10==9或者num+1>n:说明这一排到头了,接下来需要计算num/10放入结果中
class Solution {
public List<Integer> lexicalOrder(int n) {
List<Integer> result = new ArrayList<>(n);
int tmpNum = 1;
for (int i = 0;i < n;i++) {
result.add(tmpNum);
if (tmpNum*10 <= n) {
tmpNum = tmpNum * 10;
}else{
while(tmpNum%10==9 || tmpNum+1 > n){
tmpNum = tmpNum/10;
}
tmpNum = tmpNum + 1;
}
}
return result;
}
}
尤其需要注意判断条件