题目
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~n的字典序排列。
例如:假设13.返回结果: [1,10,11,12,13,2,3,4,5,6,7,8,9].
思路
这个题目从题面上可以看出是一个构造的题目,而且是一个典型的回溯的问题。
代码
class Solution {
public:
vector<int> lexicalOrder(int n) {
vector<int> res;
for(int i = 1; i < 10; i++){
dfs(i,n,res);
}
return res;
}
void dfs(int cur,int n,vector<int> &res){
if(cur > n ){
return;
}else{
res.push_back(cur);
for(int i = 0; i < 10; i ++){
if(10*cur+ i > n){
}else{
dfs(10*cur+i,n,res);
}
}
}
}
};