题目要求
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,9
思路和代码
这题其实要求我们将数字是做字母来进行排序,因此当我们排序的时候可以看到,假如已知当前的数字为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);
}
}
想要了解更多开发技术,面试教程以及互联网公司内推,欢迎关注我的微信公众号!将会不定期的发放福利哦~
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。