zoukankan      html  css  js  c++  java
  • Print Numbers by Recursion

    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 };
  • 相关阅读:
    [转] Spring的session管理
    C# 屏幕截图
    C#数字图像处理图像旋转图片加角度
    C#委托
    C# HttpWebRequest 添加Cookie验证
    网站
    前端获取URL中的值
    从下往上画的文字
    测试SSL的网站
    Tomcat-绑定证书的两种方法
  • 原文地址:https://www.cnblogs.com/amazingzoe/p/5782537.html
Copyright © 2011-2022 走看看