用递归打印数字-LintCode

来源:互联网 发布:詹姆斯和科比知乎 编辑:程序博客网 时间:2024/06/05 15:25

用递归的方法找到从1到最大的N位整数。

提示:
用下面这种方式去递归其实很容易:

recursion(i) {    if i > largest number:        return    results.add(i)    recursion(i + 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].

挑战:
用递归完成,而非循环的方式。

#ifndef C371_H#define C371_H#include<iostream>#include<vector>#include<cmath>using namespace std;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> v;        if (n <= 0)            return v;        if (n == 1)            return vector<int>{1, 2, 3, 4, 5, 6, 7, 8, 9};        v = numbersByRecursion(n - 1);        int len = v.size();        for (int i = 1; i < 10; ++i)        {            v.push_back(i* pow(10, n - 1));            for (int j = 0; j < len; ++j)                v.push_back(i * pow(10, n - 1) + v[j]);        }        return v;    }};#endif