您的位置:首页 > 其它

LintCode 用递归打印数字

2017-03-22 13:01 288 查看
用递归的方法找到从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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  递归 打印