给定一个整数 n, 返回从 1 到 n 的字典顺序。
例如,
给定 n =1 3,返回 [1,10,11,12,13,2,3,4,5,6,7,8,9] 。
请尽可能的优化算法的时间复杂度和空间复杂度。 输入的数据 n 小于等于 5,000,000。
DFS。
class Solution:
def lexicalOrder(self, n: int) -> List[int]:
res = []
def dfs(i, n):
if i > n:
return
res.append(i)
for j in range(10):
dfs(i * 10 + j, n)
for i in range(1, 10):
dfs(i, n)
return res
class Solution {
public List<Integer> lexicalOrder(int n) {
List<Integer> res = new ArrayList<>();
for (int i = 1; i < 10; ++i) {
dfs(res, i, n);
}
return res;
}
private void dfs(List<Integer> res, int i, int n) {
if (i > n) {
return;
}
res.add(i);
for (int j = 0; j < 10; ++j) {
dfs(res, i * 10 + j, n);
}
}
}
class Solution {
public:
vector<int> lexicalOrder(int n) {
vector<int> res;
for (int i = 1; i < 10; ++i)
{
dfs(res, i, n);
}
return res;
}
void dfs(vector<int> &res, int i, int n) {
if (i > n)
return;
res.push_back(i);
for (int j = 0; j < 10; ++j)
{
dfs(res, i * 10 + j, n);
}
}
};
func lexicalOrder(n int) []int {
var res []int
var dfs func(int, int)
dfs = func(i, n int) {
if i > n {
return
}
res = append(res, i)
for j := 0; j < 10; j++ {
dfs(i*10+j, n)
}
}
for i := 1; i < 10; i++ {
dfs(i, n)
}
return res
}