美文网首页
386. Lexicographical Numbers

386. Lexicographical Numbers

作者: matrxyz | 来源:发表于2018-01-16 07:22 被阅读0次

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.

Solution:

思路:

The idea is pretty simple. If we look at the order we can find out we just keep adding digit from 0 to 9 to every digit and make it a tree.
Then we visit every node in pre-order. 
       1        2        3    ...
      /\\        /\\       /\\
   10 ...19  20...29  30...39   ....

Time Complexity: O(N) Space Complexity: O(N)

Solution Code:

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

相关文章

网友评论

      本文标题:386. Lexicographical Numbers

      本文链接:https://www.haomeiwen.com/subject/zxijoxtx.html