题解
首先读题后可知是按一定规律输出,
什么规律呢?脑海里大致想象成一个树或者森林,准确可以理解成森林,第一棵树根是1,以此类推分别是2,3,4,5
故:我们可以想象成十棵树,然后依照题中的意思是5*10^4,应该为五层及五层循环给其定义好即可。
每次循环前将当前数字记在数组里,这是因为位数不同数字不同,每次循环仅仅为10,这是由于每次以10为单位进位的时候都会引起字典的特殊判断。即在只有一个地址空间情况下,循环记入字典序序列。
code:
class Solution {
public:
vector<int> lexicalOrder(int n) {
vector<int> v(n);
int num=0;
for(int i=1;i<=n&&i<10;i++){
v[num++]=i;
for(int ii=10*i;ii<=n && ii<10*i+10;ii++){
v[num++]=ii;
for(int iii=10*ii;iii<=n && iii<10*ii+10;iii++){
v[num++]=iii;
for(int iiii=10*iii;iiii<=n && iiii<10*iii+10;iiii++){
v[num++]=iiii;
for(int iiiii=10*iiii;iiiii<=n && iiiii<10*iiii+10;iiiii++){
v[num++]=iiiii;
}
}
}
}
}
return v;
}
};