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.
题解:数学找规律
class Solution {
public:
vector<int> lexicalOrder(int n) {
vector<int> res(n);
int cur=1,k=1;
res[0]=cur;
while(k<n) {
if(cur*10<=n) {
cur*=10;
res[k++]=cur;
}
else {
int t=cur%10;
for(int i=1;t+i<=9;i++) {
if(cur+i>n) {
break;
}
else {
res[k++]=cur+i;
}
}
while(cur>0) {
if(cur<=9) break;
cur/=10;
if(cur%10<9) {
res[k++]=++cur;
break;
}
}
}
}
return res;
}
};