码迷,mamicode.com
首页 > 其他好文 > 详细

Print Numbers by Recursion

时间:2016-08-18 06:29:46      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:

Print numbers from 1 to the largest number with N digits by recursion.

 Notice

It‘s pretty easy to do recursion like:

recursion(i) {
    if i > largest number:
        return
    results.add(i)
    recursion(i + 1)
}

however this cost a lot of recursion memory as the recursion depth maybe very large. Can you do it in another way to recursive with at most N depth?

 

Example

Given N = 1, return [1,2,3,4,5,6,7,8,9].

Given N = 2, return[1,2,3,4,5,6,7,8,9,10,11,12,...,99].

 

Runtime: 179ms.

 1 class Solution {
 2 public:
 3     /**
 4      * @param n: An integer.
 5      * return : An array storing 1 to the largest number with n digits.
 6      */
 7     vector<int> numbersByRecursion(int n) {
 8         // write your code here
 9         vector<int> result;
10         if (n <= 0) return result;
11         
12         printNumbers(result, 0, n);
13         return result;
14     }
15     
16 private:
17     void printNumbers(vector<int>& result, int depth, int n) {
18         if (depth >= n) return;
19         
20         int copyNumber = result.size();
21         for (int i = 1; i <= 9; i++) {
22             int base = i * pow(10, depth);
23             result.push_back(base);
24             for(int j = 0; j < copyNumber; j++) {
25                 result.push_back(base + result[j]);
26             }
27         }
28         printNumbers(result, depth + 1, n);
29     }
30 };

 

Print Numbers by Recursion

标签:

原文地址:http://www.cnblogs.com/amazingzoe/p/5782537.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!