字典序排列数字

91 阅读1分钟

给你一个整数 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;
    }
}

尤其需要注意判断条件