zoukankan      html  css  js  c++  java
  • Climbing Stairs

    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 }
  • 相关阅读:
    jsp分页原理
    解决PowerDesigner 错误:Invalid repository user or password!
    JSP禁用缓存常用方法
    PowerDesigner 15破解补丁
    PowerDesigner建立与数据库的连接,以便生成数据库和从数据库生成到PD中。[Oracle 10G版]
    二十三、Intent
    axis2+spring集成
    ASP.NET获取MS SQL Server安装实例
    显示非站点目录图片
    行为的抽象即是接口(Interface)
  • 原文地址:https://www.cnblogs.com/EdwardLiu/p/4339017.html
Copyright © 2011-2022 走看看