題目地址:
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);
}
}
時間複雜度,空間。