用递归的方法找到从1到最大的N位整数。
样例
给出 N = 1 , 返回[1,2,3,4,5,6,7,8,9] .
给出 N = 2 , 返回[1,2,3,4,5,6,7,8,9,10,11,...,99] .
注意
用下面这种方式去递归其实很容易:
recursion(i) {
if i > largest number:
return
results.add(i)
recursion(i + 1)
}
但是这种方式会耗费很多的递归空间,导致堆栈溢出。你能够用其他的方式来递归使得递归的深度最多只有 N 层么?
挑战
用递归完成,而非循环的方式。
分析:递归的深度最多只有N层,说明每一位是一次递归,其实也就是先把i-1层的都算出来,再计算第i层的就行
代码:
class Solution {
public:
/**
* @param n: An integer.
* return : An array storing 1 to the largest number with n digits.
*/
vector<int> numbersByRecursion(int n) {
// write your code here
vector<int> ret;
if(n<=0)
return ret;
else if(n==1)
{
ret = {1,2,3,4,5,6,7,8,9};
return ret;
}
else
{
vector<int> temp = numbersByRecursion(n-1);
copy(temp.begin(),temp.end(),back_inserter(ret));
for(int i=1;i<=9;i++)
{
ret.push_back(pow(10,n-1)*i);
for(auto x:temp)
{
ret.push_back(pow(10,n-1)*i+x);
}
}
return ret;
}
}
};
|
|