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); } }
想要了解更多开发技术,面试教程以及互联网公司内推,欢迎关注个人微信公众号!将会不按期的发放福利哦~微信