lintcode:递归打印数字

题目

用递归打印数字 

用递归的方法找到从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:returnresults.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 hereint 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 hereN = 1for i in range(n):N *=10result = []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 hereint 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位数,就如同下面一样,这个很明显是找规律了。。。

转载于:https://www.cnblogs.com/theskulls/p/4944831.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/258125.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

做免费的EDM,EmailCar看中的是挖掘数据的价值

从2008年开始&#xff0c;做了9年企业级EDM&#xff08;电子邮件营销&#xff09;服务的陆霏近日宣布&#xff0c;他们的产品EmailCar从4.0版本开始永久免费为企业提供电子邮件基础投递业务。 我们电子邮箱经常收到的推广邮件就属于EDM&#xff0c;即Email Direct Marketing。这…

java 读取split_Java报错系列——split

在String中,split方法如下&#xff1a;可见&#xff0c;split的核心在于Pattern.compile(regex).split(this, limit);Java提供Pattern,Matcher用于支持正则&#xff0c;可以看一个例子&#xff1a;运行结果是&#xff1a;0,1||3,4|ab|7,8|cef|8,9||11,12|kk|13,14|a|需要注意的…

VS2012生成事件

Visual Studio 事件生成功能对我们开发综合项目的过程中尤为重要。 下面以VS2012为例&#xff1a; 选择工程-> 属性->编译->生成事件 包括两个生成事件&#xff1a;预先生成事件和后期生成事件 直接在相应的文本框里编写写脚本即可&#xff0c;如&#xff1a;编译完成…

H3C Navigate 2017 | 拉近世界的距离 新华三的泛联接版图

就今天而言&#xff0c;联接世界的网络外延已经无限扩大&#xff0c;联接的方式也越来越复杂。从互联网时代的PC互联&#xff0c;演进到移动互联网时代手机等移动终端的互联&#xff0c;而即将大规模爆发的物联网应用时代&#xff0c;所有的事物都可能被连入网络&#xff0c;一…

java gc log调优_Java 开启 gc 日志

构建一个 jar 包程序使用 Spring Boot 构建一个简单的 web 程序&#xff0c;可以直接使用 java -jar 来启动。RestControllerRequestMapping("/root")SpringBootApplicationpublic class SbDemoApplication {public static void main(String[] args) {SpringApplicat…

大数据时代的公共安全治理

未来&#xff0c;大数据将成为社会基础设施的一部分&#xff0c;跟公路、自来水、电一样&#xff0c;成为人们生活不可或缺的一部分。但大数据的作用并不仅仅局限于为普通消费者提供生活必须服务&#xff0c;它已经开始在信息产业、公共安全、交通运输、金融、水利等领域中发挥…

CCNA第二讲笔记

网络定义&#xff1a;一组由介质&#xff08;线缆&#xff09;互联的网络设备&#xff08;路由器、交换机&#xff09;和终端系统&#xff08;PC&#xff09;&#xff1b; 工作组&#xff1a;局域网范畴&#xff0c;范围最小的局域网&#xff0c;且不涉及网络设备。台式机需要有…

晶科电力打造山东省最大物流港分布式光伏项目

近日&#xff0c;晶科电力有限公司宣布&#xff0c;由该公司投建的山东省最大物流港分布式光伏项目已破土动工&#xff0c;成为山东省又一标志性光伏项目。 该项目装机量为6兆瓦&#xff0c;占用物流港厂房屋顶面积约68330平方米&#xff0c;平均每年发电量约601.22万kWh&#…

服务器资源管理器视图的添加显示的步骤

MVC视图查看数据库表结构时&#xff0c;通常会打开服务器资源管理器视图&#xff0c;在服务器资源管理器视图中能查看表的数据集及表结构 打开的方法为&#xff1a; ①可使用快捷键&#xff1a; ctrlaltS ②也可添加“服务器资源管理器视图”到“视图”工具菜单&#xff0c;做法…

java中怎么用代码打出ASCII码字符_JAVA实现打印ascii码表代码

我就废话不多说了&#xff0c;大家还是直接看代码吧~package com.jalor;public class AAAA {public static void main(String[] args) {outputA(65);outputA(97);}// 打印ascii码表public static void outputA(int count){for (int i 0; i < 26; i) {System.out.print((cha…

javascript this指针指向?

前言 理解javascript的指针就需要先了解js的执行环境和作用域&#xff01;执行环境的定义了变量或函数有权访问的其他数据&#xff0c;决定了它们各自的行为。每个执行环境都有一个与之关联的变量对象&#xff0c;环境中定义的所有的变量和函数都保存在这个对象中。虽然我们编写…

能源局将提高光伏“领跑者”项目技术指标

记者从权威渠道获悉&#xff0c;国家能源局正计划对光伏“领跑者”中有关单多晶的转换效率标准等细节进行修改。“领跑者”计划中&#xff0c;光电转换效率的修订工作将在今年3月底展开&#xff0c;主要向各大相关机构、企业征求意见&#xff0c;如果争议较多&#xff0c;定稿时…

phpize增加php模块

一&#xff0c;phpize的好处 什么时候我们要用phpize呢&#xff1f;我们在安装php时&#xff1a; ./configure --prefix/usr/local/php --with-mysql/usr/local/mysql --with-zlib-dir --with-freetype-dir/usr --with-jpeg-dir/usr --with-png-dir/usr --enable-gd-native-ttf…

java安全权限配置_使用Spring安全表达式控制系统功能访问权限问题

一、SPEL表达式权限控制从spring security 3.0开始已经可以使用spring Expression表达式来控制授权&#xff0c;允许在表达式中使用复杂的布尔逻辑来控制访问的权限。Spring Security可用表达式对象的基类是SecurityExpressionRoot。表达式函数描述hasRole([role])用户拥有指定…

SlidingMenu的使用,结合Fragment(eclipse环境)

首先下载SlidingMenu&#xff0c;有Library和Sample&#xff0c;然后在自己的项目中引入类库&#xff08;引入智慧北京工作空间的Library&#xff09;&#xff0c;然后V4包会发生冲突&#xff0c;删掉自己项目Libs目录下的V4包即可 侧滑布局和主界面布局都先用一个空布局填充一…

log4j日志文件配置说明及使用

一.log4j.properties文件格式说明&#xff1a; log4j.rootLoggerinfo, stdoutlog4j.appender.stdoutorg.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layoutorg.apache.log4j.PatternLayout# Pattern to output the callers file name and line number.log4j.appende…

java如何做全局缓存_传智播客JNI第七讲 – JNI中的全局引用/局部引用/弱全局引用、缓存jfieldID和jmethodID的两种方式...

讲解JNI中的全局引用/局部引用/弱全局引用、缓存jfieldID和jmethodID的两种方式&#xff0c;并编写两种缓存方式的示例代码。1.从Java虚拟机创建的对象传到本地C/C代码时会产生引用&#xff0c;根据Java的垃圾回收机制&#xff0c;只要有引用存在就不会出发该引用指向的Java对象…

起一卦,还是那个破事。还是大凶。

公元&#xff1a;2013年6月20日11时48分46秒 阳3局农历&#xff1a;2013年05月12日11时48分芒种&#xff1a;2013-6-5 20:44:00 小暑&#xff1a;2013-7-7 7:09:00干支&#xff1a;癸巳年 戊午月 丁巳日 丙午时 旬空&#xff1a;午未空 子丑空 子丑空 寅卯空直符&#…

老工业基地调整改造与振兴

老工业基地调整改造与振兴 一、运用“两只手”&#xff0c;加快工业结构调整 一方面&#xff0c;运用市场机制即“看不见的手”进行调整。通过市场竞争机制、价格波动机纠、供求均衡机制、优胜劣汰机制等&#xff0c;实现资源的合理流动和优化配置。 另一方面&#xff0c;运用宏…

如何使用DNS反向映射来扫描IPv6地址?

目前增加的IPv6地址空间不仅提高了对启发式算法的使用&#xff08;执行IPv6地址扫描时&#xff09;&#xff0c;而且还推动了人们探索替代技术用于查找IPv6节点。本文中我们将探讨如何使用一种极其强大的向量来发现IPv6节点&#xff1a;使用DNS反向映射。 IPv6地址扫描攻击通常…