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
想要了解更多開發技術,面試教程以及互聯網公司內推,歡迎關注個人微信公衆號!將會不按期的發放福利哦~微信

相關文章
相關標籤/搜索