LeetCode No.4 字典序排数

1. LeetCode386题目链接链接

https://leetcode.com/problems/lexicographical-numbers/

2. 结题思路

该题主要是实现输入n,用一个数组保存从1到n,但是需要实现字典序排数,可以从左往右依次插入数字,如果很大,就会变成[1,10,100,1000...2,20,200,2000...],这样我们可以看出一个规律,如果n足够大的话,是这样的排序,我们可以将下一位与n对比,然后未超过就加入数组中,超过就再次循环依次加一,然后在进行上述过程。需要注意的是9和加一成为最后一位。

public List<Integer> lexicalOrder(int n) {
        List<Integer> list = new ArrayList<>(n);
        int curr = 1;
        for (int i = 1; i <= n; i++) {
            list.add(curr);
            if (curr * 10 <= n) {
                curr *= 10;
            } else if (curr % 10 != 9 && curr + 1 <= n) {
                        curr++;
                    }else {
                        while ((curr / 10) % 10 == 9) {
                            curr /= 10;
                        }
                        curr = curr / 10 + 1;
                    }
        }
        return list;
    }

3. 结果

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容