leetcode386. Lexicographical Numbers

题目要求

Given an integer n, return 1 - n in lexicographical order.

For example, given 13, return: [1,10,11,12,13,2,3,4,5,6,7,8,9].

Please optimize your algorithm to use less time and space. The input size may be as large as 5,000,000.

将1~n这n个数字按照字母序排序,并返回排序后的结果。
即若是n=13,则1~13的字母序为1,10,11,12,13,2,3,4,5,6,7,8,9java

思路和代码

这题其实要求咱们将数字是作字母来进行排序,所以当咱们排序的时候能够看到,假如已知当前的数字为i,则它首前后一位数字应当是(i x 10),若是(i x 10)大于n,再考虑i+1, 若是i+1也大于n,此时再考虑(i/10)+1面试

public List<Integer> lexicalOrder(int n) {
        List<Integer> result = new ArrayList<Integer>();
        for(int i = 1 ; i<=9 ; i++) {
            lexicalOrder(n, i, result);
        }
        return result;
    }
    
    public void lexicalOrder(int n, int cur, List<Integer> result) {
        if(cur > n) return;
        result.add(cur);
        for(int i = 0 ; i <=9 ; i++) {
            lexicalOrder(n, cur*10+i, result);
        }
    }

clipboard.png
想要了解更多开发技术,面试教程以及互联网公司内推,欢迎关注个人微信公众号!将会不按期的发放福利哦~微信

相关文章
相关标签/搜索