题目

用递归的方法找到从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].

注意

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

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

但是这种方式会耗费很多的递归空间,导致堆栈溢出。你能够用其他的方式来递归使得递归的深度最多只有 N 层么?

挑战

用递归完成,而非循环的方式

解题

非递归最简单了,先求出最大的n位数N,然后顺序遍历求解

public class Solution {
/**
* @param n: An integer.
* return : An array storing 1 to the largest number with n digits.
*/
public List<Integer> numbersByRecursion(int n) {
// write your code here
int N = 1;
for(int i = 1;i<=n;i++){
N = N*10;
}
N = N - 1;
List<Integer> result = new ArrayList<Integer>();
for(int i =1;i<= N ;i++){
result.add(i);
}
return result;
}
}

Java Code

总耗时: 1629 ms

class Solution:
# @param n: An integer.
# return : A list of integer storing 1 to the largest number with n digits.
def numbersByRecursion(self, n):
# write your code here
N = 1
for i in range(n):
N *=10
result = []
for i in range(1,N):
result.append(i)
return result

Python Code

总耗时: 674 ms

给的递归方式,运行到74%RunTime Error

public class Solution {
/**
* @param n: An integer.
* return : An array storing 1 to the largest number with n digits.
*/
public List<Integer> numbersByRecursion(int n) {
// write your code here
int N = 1;
for(int i = 1;i<=n;i++){
N = N*10;
}
N = N - 1;
List<Integer> result = new ArrayList<Integer>();
getPrint(1,N,result);
return result;
}
public void getPrint(int i,int N,List<Integer> result ){
if(i>N)
return ;
result.add(i);
getPrint(i+1,N,result);
}
}

Java Code

参考程序来源

    public int PrintN(int n,List<Integer> res){
if(n==0){
return 1;
}
int base = PrintN(n-1,res);
int size = res.size();
for(int i = 1;i<= 9;i++){
int subbase = base*i;
res.add(subbase);
for(int j= 0;j< size ;j++){
res.add(subbase+res.get(j));
}
}
return base*10;
}

上面是关键程序

在求 n-1位数到n位数的时候,先求n-2位数到n-1位数,就如同下面一样,这个很明显是找规律了。。。

lintcode:递归打印数字的更多相关文章

  1. LintCode-371.用递归打印数字

    用递归打印数字 用递归的方法找到从1到最大的N位整数. 注意事项 用下面这种方式去递归其实很容易: recursion(i) { if i > largest number: return re ...

  2. 【递归】数字三角形 简单dp

    [递归]数字三角形 题目描述 对于大多数人来说,“我们是这么的正常,因此也就这么的平庸.”而天才总是与众不同的,所以当邪狼问修罗王:“老大,你蹲在那儿一动不动看了有半个小时了,蚂蚁有那么好看吗?” 修 ...

  3. 递归打印lua中的table

    在lua中,table是比较常用的数据形式,有时候为了打印出里面的内容,需要做一些特殊处理. 废话不多讲,直接粘代码: print = release_print -- 递归打印table local ...

  4. 面试 15:顺时针从外往里打印数字(剑指 Offer 第 20 题)

    面试 15:顺时针从外往里打印数字 题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印每一个数字.例如输入: {{1,2,3}, {4,5,6}, {7,8,9}} 则依次打印数字为 1.2.3. ...

  5. UVA1626 - Brackets sequence(区间DP--括号匹配+递归打印)

    题目描写叙述: 定义合法的括号序列例如以下: 1 空序列是一个合法的序列 2 假设S是合法的序列.则(S)和[S]也是合法的序列 3 假设A和B是合法的序列.则AB也是合法的序列 比如:以下的都是合法 ...

  6. 使用递归打印二叉树的左视图 java

    使用递归打印二叉树的左视图 java package com.li.jinRiTouTiao; public class PrintLeftView { static class TreeNode{ ...

  7. DP(递归打印路径) UVA 662 Fast Food

    题目传送门 题意:n个饭店在一条直线上,给了它们的坐标,现在要建造m个停车场,饭店没有停车场的要到最近的停车场,问所有饭店到停车场的最短距离 分析:易得区间(i, j)的最短距离和一定是建在(i + ...

  8. Shell脚本递归打印指定文件夹中全部文件夹文件

    #!/bin/bash #递归打印当前文件夹下的全部文件夹文件. PRINTF() { ls $1 | while read line #一次读取每一行放到line变量中 do [ -d $1/$li ...

  9. Java n个线程轮流打印数字的问题

    一. 实现两个线程.轮流打印出数字.例如以下: bThread --> 10 aThread --> 9 bThread --> 8 aThread --> 7 bThread ...

随机推荐

  1. 基于BT协议的文件分发系统

    基于BT协议的文件分发系统构成:    1.一个Web服务器:保存着种子文件    2.一个种子文件:保存共享文件的一些信息(文件名,文件大小    ,Tracker服务器地址,torrent为后缀) ...

  2. ERP基本功——物料的四个量

    ERP基本功——物料的四个量 在分析制造业管理问题的时候,如果能借用一些ERP里才会用到的概念,就会非常的简单,并且条理清晰. 我觉得柳中冈先生一再强调的一个观点非常有用,大意是这样的:任何人依据现有 ...

  3. 基于WORDPRESS+MYSQL的绿色企业主题制作全过程

    基于WORDPRESS+MYSQL的绿色企业主题制作全过程基于WORDPRESS+MYSQL的绿色企业主题制作全过程基于WORDPRESS+MYSQL的绿色企业主题制作全过程基于WORDPRESS+M ...

  4. sql server 中 bigint 和 datetime 性能比较

    -- 创建表 create table Test_tbl ( ID varchar(40) primary key nonclustered, IntCol int, DateCol datetime ...

  5. Delphi 二次开发 CorelDRAW

    我们首先通过一个简单的程序例子来看一下Delphi对CorelDRAW二次开发有什么样的效果.本程序实现CorelDRAW程序的打开和关闭. 1.1 Delphi与CorelDRAW连接 在程序与Co ...

  6. C#生成随机字符串

    //<summary> ///得到随机字符. ///</summary> ///<param name="intLength">Length o ...

  7. 一道关于比赛胜负的Sql查询题目

    以前做过一道题目,一直没有来得及总结下来.贴图: 记得以前曾经找到了两种方法,今天试了一下,还是可以的,贴出过程: 下面是具体的查询方法: 原来放的是图片,今天又练习了一下,附代码: create T ...

  8. [转]MAC下JDK版本的切换

    系统里之前先安装里jdk6的,后台又装里7,安装完成后,java -version 版本是7,  导致我eclipse打不开,一开始的做法是,把7的版本给删除掉. 删除的方法也很简单,在命令行中到 / ...

  9. 使用本地光盘安装Microsoft .NET Framework 3.5 for Win8.1/WinServer2012R2

    .NET Framework 3.5 作为的SQL Server 2012的先决条件,假如使用图形化方式需要使用internet,对于服务器部署时缓慢的一点(需要下载后安装) 以下提供一个使用使用安装 ...

  10. 10、WPF程序集

    WPF核心程序集 PresentationCore.dll:这个程序集定义了许多构成WPF GUI层基础的类型.例如包含WPF Ink API(pc笔针输入,手写输入)的支持.几个动画基元以及几个图形 ...