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.


思路:

由于之前做过相关的题目。原本以为这道题是很简单的字典序排序但是被这道题后面的那句话(Please optimize your algorithm to use less time and space.)打脸了。

这道题用到了非常巧妙的排序解法。我们可以通过组合数据的方式解决这道题。任何数据都是以[0, 9]开头的,由于此题的最小值是1,所以这个区间是[1, 9]。

之后是递归函数的设计,递归需要满足的第一个条件就是跳出,一旦咱们组合的数(target)大于输入的值n的时候就跳出递归。之后就是组数操作,设置一个循环,范围从0~10,之后target乘上10并加上循环的指数[0, 10]。在进行调用自身函数的操作。这是递归需要满足的第二个条件。


代码:

/**
     * Lexicographical Order
     * @param n
     * @return
     */
public List lexicalOrder(int n) {
       Listresult = new ArrayList();
       for(int i=1;i<10;i++){
        recursive(result, i, n);
       }
       return result;
}
    
private void recursive(List list, int target, int num){
    if(target>num){
        return;
    }
    list.add(target);
    for(int i=0;i<10;i++){
        recursive(list, target*10 + i, num);
    }
}

你可能感兴趣的:(Leetcode386-Lexicographical Numbers)