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.pswp.cn/news/258125.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/258125.shtml
英文地址,請注明出處:http://en.pswp.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地址掃描攻擊通常…