题目地址:
https://www.lintcode.com/problem/print-numbers-by-recursion/description
给定正整数,返回从开始数到个的所有数字。要求用递归。
如果,那么直接返回即可。我们考虑如何从跨步到。我们发现,当到时,不过就是在的答案后面添加乘以再加上,也就是添加,,等等。而当到时,就是在的答案后面添加乘以再加上。这就可以用递归了。我们需要将从“乘以再加上”的起始位置作为参数传递下去。代码如下:
import java.util.ArrayList;
import java.util.List;
public class Solution {
/**
* @param n: An integer
* @return: An array storing 1 to the largest number with n digits.
*/
public List<Integer> numbersByRecursion(int n) {
// write your code here
List<Integer> res = new ArrayList<>();
if (n == 0) {
return res;
}
for (int i = 1; i <= 9; i++) {
res.add(i);
}
dfs(n, res, 0);
return res;
}
private void dfs(int n, List<Integer> res, int start) {
if (n == 1) {
return;
}
int size = res.size();
for (int i = start; i < size; i++) {
for (int j = 0; j <= 9; j++) {
res.add(res.get(i) * 10 + j);
}
}
dfs(n - 1, res, start * 10 + 9);
}
}
时间复杂度,空间。