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: dfs
思路:
易错点:
- 这种写法不排除0会造成0-0-0的死循环。
class Solution {
public:
vector<int> lexicalOrder(int n) {
vector<int> res;
lexHelper(res, n, 0);
return res;
}
void lexHelper(vector<int> & res, int n, int cur) {
if (cur > n) return;
for (int j = 0; j <= 9; j++) {
if (cur * 10 + j <= n && cur * 10 + j != 0) {
res.push_back(cur * 10 + j);
lexHelper(res, n, cur * 10 + j);
}
}
return;
}
};