美文网首页
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