题目
思路 递归
第一位数不能为0,所以将第一位数从1-9进行深度优先搜索,从第二位开始可以为0,因此从0-9继续递归。
代码
class Solution {
public:
vector<int> ans;
int n;
vector<int> lexicalOrder(int _n) {
n = _n;
for(int prefix = 1; prefix <= 9; prefix++){
dfs(prefix);
}
return ans;
}
void dfs(int prefix){
if(prefix > n) return;
ans.push_back(prefix);
for(int i = 0; i <= 9; i++){
dfs(prefix * 10 + i);
}
}
};
思路 迭代
从1开始,如果乘10不超出范围,就一直乘10;如果超出了范围,就加1,直到num余10为9,或再加1就超出范围了。
代码
class Solution {
public:
vector<int> lexicalOrder(int n) {
vector<int> ans(n);
int num = 1;
for(int i = 0; i < n; i++){
ans[i] = num;
if(num * 10 <= n){
num *= 10;
}else{
while(num % 10 == 9 || num + 1 > n)
num /= 10;
num++;
}
}
return ans;
}
};