题目:
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.将所有数字转成字符串,字符串按位排序,然后再转回整数。(AC失败)
2.按个位数遍历,比如从1开始,那么在遍历2之前,先遍历1开头的1*10的十位数,如果这个数小于n的话,就可以一直遍历下去,如果这个数>=n了,那么就除以10,也就变成了从2开始,同理递推……
代码:
class Solution {
public:
vector<int> lexicalOrder(int n) {
vector<int> result(n);
int current = 1;
for(int i=0;i<n;i++)
{
result[i] = current;
if(current*10<=n)
{
current = current*10;
}
else
{
if(current>=n)
current = current/10;
current++;
while(current%10==0)
current = current/10;
}
}
return result;
}
};