• 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 }
  • 相关阅读:
    四则运算测试脚本运行情况
    AAA
    (2015秋) 软工作业成绩公布(12月26号更新)
    判断闰年的Java算法
    B
    A
    Where Amazing Happens
    安利一发资料站
    C
    B
  • 原文地址:https://www.cnblogs.com/EdwardLiu/p/4339017.html
Copyright © 2020-2023  润新知