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