用递归的方法找到从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; } } };
原文地址:http://blog.csdn.net/wangyuquanliuli/article/details/45896039