用递归的方法找到从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]
.
用递归完成,而非循环的方式。
方法一:循环输出
最大的数为10^n -1
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;
int max = 1;
for(int i =1; i< n+1; i++){
max *= 10;
}
for(int j=1; j< max; j++){
ret.push_back(j);
}
return ret;
}
};
方法二:递归输出(会溢出)
这种方法,最大值为多少,就递归多少层。当数据比较大时,导致栈溢出
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
int max = 1;
for(int i =1; i< n+1; i++){
max *= 10;
}
return print(max);
}
vector<int> print(int n){
vector<int> ret;
int i =1;
if(i <= n){
ret.push_back(i);
print(i+1);
}
return ret;
}
};
方法三: 递归输出(不溢出)
递归使得递归的深度最多为N。将1-10定为一层,10-100定为一层,那么输入n,最多就循环n层。
class Solution {
public:
/**
* @param n: An integer.
* return : An array storing 1 to the largest number with n digits.
*/
vector<int> ret; //存放数据
vector<int> numbersByRecursion(int n) {
// write your code here
if( n<1 ){
return ret;
}
return print(1,n); //打印从1开始的n位数
}
vector<int> print(int i, int n){
if( n>=1 ){ //依次将1-9,10-99,100-999放入容器内
int max = i*10;
for(int j=i; j<max; j++){
ret.push_back(j);
}
print(max, n-1);
}
return ret;
}
};