Climbing Stairs - Print Path

stair climbing, print out all of possible solutions of the methods to climb a stars, you are allowed climb one or two steps for each time; what is time/space complexity? (use recursion)

这道题难是难在这个ArrayList<String> res是用在argument还是返回值,纠结了好久

Recursion 解法:

 1 package fib;
 2 
 3 import java.util.ArrayList;
 4 
 5 public class climbingstairs {
 6     
 7     public ArrayList<String> climb (int n) {
 8         if (n <= 0) return null;
 9         ArrayList<String> res = new ArrayList<String>();
10         if (n == 1) {
11             res.add("1");
12             return res;
13         }
14         if (n == 2) {
15             res.add("2");
16             res.add("12");
17             return res;
18         }
19         ArrayList<String> former2 =  climb(n-2); 
20         for (String item : former2) {
21             res.add(item+Integer.toString(n));
22         }
23         ArrayList<String> former1 = climb(n-1);
24         for (String item : former1) {
25             res.add(item+Integer.toString(n));
26         }
27         return res;
28     }
29 
30     
31     public static void main(String[] args) {
32         climbingstairs obj = new climbingstairs();
33         ArrayList<String> res = obj.climb(6);
34         for (String item : res) {
35             System.out.println(item);
36         }
37     }
38 
39 }

Sample input : 6

Sample Output: 

246
1246
1346
2346
12346
1356
2356
12356
2456
12456
13456
23456
123456

 

 follow up: could you change the algorithm to save space? 

这就想到DP,用ArrayList<ArrayList<String>>

 1 import java.util.ArrayList;
 2 
 3 public class climbingstairs {
 4     
 5     public ArrayList<String> climb (int n) {
 6         if (n <= 0) return null;
 7         ArrayList<ArrayList<String>> results = new ArrayList<ArrayList<String>>();
 8         for (int i=1; i<=n; i++) {
 9             results.add(new ArrayList<String>());
10         }
11         if (n >= 1) {
12             results.get(0).add("1");
13         }
14         if (n >= 2) {
15             results.get(1).add("2");
16             results.get(1).add("12");
17         }
18 
19         for (int i=3; i<=n; i++) {
20             ArrayList<String> step = results.get(i-1);
21             ArrayList<String> former2 = results.get(i-3);
22             for (String item : former2) {
23                 step.add(item+Integer.toString(i));
24             }
25             ArrayList<String> former1 = results.get(i-2);
26             for (String item : former1) {
27                 step.add(item+Integer.toString(i));
28             }
29         }
30         return results.get(n-1);
31     }
32 
33     
34     public static void main(String[] args) {
35         climbingstairs obj = new climbingstairs();
36         ArrayList<String> res = obj.climb(5);
37         for (String item : res) {
38             System.out.println(item);
39         }
40     }
41 
42 }

 

转载于:https://www.cnblogs.com/EdwardLiu/p/4339017.html

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

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

相关文章

java 单例设计_Java 之单例设计模式

设计模式: 对问题行之有效的解决方式, 其实它是一种思想.单例设计模式解决的问题:就是可以保证一个类在内存中的对象唯一性. 即单个实例.比如对于A 和 B 两个程序使用同一个配置信息对象时, A 对配置信息作出修改, B 也与之对应的更新配置信息, 即需要保证该对象的唯一性.如何保…

Javascript之RegExp

RegExp对象的构造器 new RegExp(pattern[, flags]) pattern 正则表达式文本flags 该参数可以是下面几个值的任意组合&#xff1a;g 全局匹配i 忽略大小写m 让开始和结束字符&#xff08;^ 和 $&#xff09;工作在多行模式&#xff08;也就是&#xff0c;^ 和 $ 可以匹配字符串中…

DS汽车通过采用沉浸式虚拟现实技术实现展厅转型

PSA集团&#xff08;PSA Group&#xff09;旗下的高端品牌DS汽车公司&#xff08;DS Automobiles&#xff09;采用达索系统的“虚拟车库&#xff08;Virtual Garage&#xff09;”行业解决方案为全新的SUV车型DS 7 CROSSBACK提供全面支持&#xff0c;推动其展厅转型&#xff0c…

java 日历记事本_calendar 一个用java编写的日历记事本. 具有正常日历功能;也可以用于在不同日期记录下当日重要的事情 - 下载 - 搜珍网...

日历记事本/日历记事本/build/classes/日历记事本/CalendarPad$1.class日历记事本/日历记事本/build/classes/日历记事本/CalendarPad.class日历记事本/日历记事本/build/classes/日历记事本/Month.class日历记事本/日历记事本/build/classes/日历记事本/NotePad.class日历记事…

要的需求 ip提取网站源码带采集 要求是PHP源码

求。ip提取网站源码带采集 要求是PHP源码。必须带采集类似 小峰IP提取网站&#xff0c;安小莫IP提取&#xff0c;迷惘IP提取&#xff0c;冰封IP提取免费类型的 不要淘宝类型的 200 转载于:https://www.cnblogs.com/PS-apple/p/4342866.html

设计模式之PHP项目应用——单例模式设计Memcache和Redis操作类

1 单例模式简单介绍 单例模式是一种经常使用的软件设计模式。在它的核心结构中仅仅包括一个被称为单例类的特殊类。通过单例模式能够保证系统中一个类仅仅有一个实例并且该实例易于外界訪问。从而方便对实例个数的控制并节约系统资源。假设希望在系统中某个类的对象仅仅能存…

java 跳转action_JS 跳转到指定Action | 学步园

最近项目需要在JS中跳转到指定的Action。通过不断的实验和查资料&#xff0c;终于成功。Java SSH2 架构下&#xff0c;正常 配置Action完毕。在xxx.jsp下window.location" ";例如&#xff1a;window.location" /user/ResAction> ";其中ResAction是配置文…

【转】康拓展开

———本文转自&#xff1a;http://www.cnblogs.com/1-2-3/archive/2011/04/25/generate-permutation-part2.html 1、康托展开  康托展开的公式是 Xan*(n-1)!an-1*(n-2)!...ai*(i-1)!...a2*1!a1*0! 其中&#xff0c;ai为当前未出现的元素中是排在第几个&#xff08;从0开始&a…

java类排序

1、实现Comparator接口 public static class ComparatorImpl implements Comparator<Element>{Overridepublic int compare(Element o1, Element o2) {if(o1.unitPrice > o2.unitPrice)return 1;else if(o1.unitPrice < o2.unitPrice){return -1;}else{return 0;}}…

java jni so_java 用jni调用so全过程

这几天一直在研究JNI的开发过程&#xff0c;顺便把NDK环境搭建一起总结下。在windows环境下开发jni需要c/c编译器的支持&#xff0c;网络上我看很多人使用cygwin。呵呵我不是很喜欢使用它&#xff0c;感觉安装起来挺麻烦的。我使用GNUStep&#xff0c;下载地址http://www.gnust…

ios开发之 -- 自动轮播图创建

这里是oc版本的&#xff0c;简单记录下&#xff1a; 具体代码如下&#xff1a; 1&#xff0c;准备 #define FRAME [[UIScreen mainScreen] bounds] #define WIDTH FRAME.size.width #define HEIGHT FRAME.size.height 2&#xff0c;具体实现 //scrollview的添加_bigScrollView…

学习进度(2016.3.13)

第二周所花时间&#xff08;包括上课&#xff09;14小时代码量&#xff08;行&#xff09;138行博客量&#xff08;篇&#xff09;4篇了解到的知识点动态数组的定义初始化和使用&#xff0c;指定范围获得随机数转载于:https://www.cnblogs.com/zzcs/p/5272365.html

binaryoperator java_BinaryOperatorT接口的用法示例

java Function函数中的BinaryOperator接口用于执行lambda表达式并返回一个T类型的返回值&#xff0c;下面的BinaryOperator用法示例让你简单了解一下。import java.util.function.BinaryOperator;public class TestDemo {public static void main(String[] args) {BinaryOperat…

线性表的顺序存储结构之顺序表类的实现_Java

在上一篇博文——线性表接口的实现_Java中&#xff0c;我们实现了线性表的接口&#xff0c;今天让我们来实现线性表的顺序存储结构——顺序表类。 首先让我们来看下顺序表的定义&#xff1a; 线性表的顺序存储是用一组连续的内存单元依次存放线性表的数据元素&#xff0c;元素在…

Linux下安装jdk

参考于&#xff1a;http://www.cnblogs.com/caosiyang/archive/2013/03/14/2959087.html 一、准备阶段 ①下载jdk-6u45-linux-i586.bin&#xff0c;通过xftp上传至Linux系统中 ②在命令行执行 ./jdk-6u45-linux-i586.bin&#xff0c;生成目录jdk1.6.0_45 ③移动到/usr/share下&…

JDK source 之 ArrayList 需要注意事项

线程安全 ArrayList内部没有实现原子性操作&#xff0c;所以是非线程安全的。如果需要在线程安全的环境下使用List的话&#xff0c;需要使用Vector 或者CopyOnWriteArrayList&#xff0c;具体场景&#xff0c;自行深入了解。 扩容算法 // minCapacity 为需要的最小容量 private…

为Tiny4412设备驱动在proc目录下添加一个可读版本信息的文件

http://blog.csdn.net/morixinguan/article/details/77808088 上节&#xff0c;我们明白了proc文件系统的作用&#xff0c;接下来我们在友善之臂已经写好的led驱动的基础上&#xff0c;在proc目录下创建一个文件夹&#xff0c;然后加入led驱动的版本信息读取。 我们在init函数的…

java audiorecord_Android 录音实现(AudioRecord)

上一篇文章介绍了使用 MediaRecorder 实现录音功能 Android录音实现(MediaRecorder) &#xff0c;下面我们继续看看使用 AudioRecord 实现录音功能。AudioRecord首先看看Android帮助文档中对该类的简单概述: AndioRecord 类的主要功能是让各种 Java 应用能够管理音频资源&#…

SqlServer中的数据类型UniqueIdentifier

SqlServer中的数据类型UniqueIdentifier究竟是什么东东&#xff1f;该类型一般用来做为主键使用&#xff0c;可用SQL语法的newid()来生成一个唯一的值。我想请问的是&#xff0c;这个值是一个长整型的数据值呢&#xff0c;还是个其他的什么值&#xff1f;我在程序中该怎样去控制…

《架构探险——从零开始写Java Web框架》这书不错,能看懂的入门书

这书适合我。 哈哈&#xff0c;结合 以前的知识点&#xff0c;勉强能看懂。 讲得细&#xff0c;还可以参照着弄出来。 希望能坚持 完成啦。。。 原来&#xff0c;JSTL就类似于DJANGO中的模板。 而servlet类中的res,req&#xff0c;玩了DJANGO就觉得好熟悉啦。。。&#xff1a;&…