Lexicographical Numbers

来源:互联网 发布:淘宝上专卖点怎么申请 编辑:程序博客网 时间:2024/06/05 09:40

题目描述:

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.

这个题主要是要想清楚下一个数究竟是多少,已经最简单的循环终止条件是什么。

public List<Integer> lexicalOrder(int n) {List<Integer> list=new ArrayList<Integer>();if(n<1)return list;list.add(1);//list包含了n个数就结束咯while(list.size()<n){int lastNum=list.get(list.size()-1);if(lastNum*10<=n){list.add(lastNum*10);}else{//如果是10的倍数就除以10的n次方if((lastNum+1)%10==0){list.add(divideNTen(lastNum+1));}else{if(lastNum+1<=n){list.add(lastNum+1);}else{list.add(lastNum/10+1);}}}}return list;}public int divideNTen(int n){while(n%10==0){n/=10;}return n;}


0 0