题目描述:
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;
}