加载中...
386-字典序排数(Lexicographical Numbers)
发表于:2021-12-03 | 分类: 中等
字数统计: 591 | 阅读时长: 2分钟 | 阅读量:

原文链接: https://leetcode-cn.com/problems/lexicographical-numbers

英文原文

Given an integer n, return all the numbers in the range [1, n] sorted in lexicographical order.

You must write an algorithm that runs in O(n) time and uses O(1) extra space. 

 

Example 1:

Input: n = 13
Output: [1,10,11,12,13,2,3,4,5,6,7,8,9]

Example 2:

Input: n = 2
Output: [1,2]

 

Constraints:

  • 1 <= n <= 5 * 104

中文题目

给你一个整数 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的字典排序进行输出;
思绪良久,方丈找来9个大法师,对第一个大法师说:“大弟子,我现在给你一个任务,我给你一个数字1,你负责把这个数字开头的,并且不大于n的所有数字按照字典排序交付于我。”
接着又对第二个大法师说:“二弟子,我也给你一个任务,我给你一个数字2,你负责把这个数字开头的,并且不大于n的所有数字按照字典排序交付于我。”
如是依次对剩下弟子说了一遍,各大法师领命依次离去;
大法师归于禅室,思虑良久:方觉方丈之策可复行之,乃唤来座下大弟子十人,依次要求将10,11,12…19开头的并且不大于n的所有数字交付于己。众大弟子离去,效法以行。

public static List<Integer> lexicalOrder(int n) {
        List<Integer> result = new ArrayList<>();
        lexicalOrder(result,null,n);
        return result;
    }

    public static void lexicalOrder(List<Integer> result,Integer currentValue,int maxNum) {
        if(currentValue != null && currentValue > maxNum){
            return;
        }
        if(currentValue != null) {
            result.add(currentValue);
        }
        for(int nextBit = 0; nextBit <= 9;nextBit++){
            if(currentValue == null ){
                if(nextBit == 0) {
                    continue;
                } else {
                    currentValue = 0;
                }
            }
            lexicalOrder(result,currentValue*10+nextBit,maxNum);
        }
    }

统计信息

通过次数 提交次数 AC比率
23893 31851 75.0%

提交历史

提交时间 提交结果 执行时间 内存消耗 语言
上一篇:
385-迷你语法分析器(Mini Parser)
下一篇:
387-字符串中的第一个唯一字符(First Unique Character in a String)
本文目录
本文目录