力扣70:
假设你正在爬楼梯。需要 n
阶你才能到达楼顶。
每次你可以爬 1
或 2
个台阶。你有多少种不同的方法可以爬到楼顶呢?
package com.lz.forth;
import java.util.HashMap;
import java.util.Map;
public class ClimbingStairs {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(climbStairsWithRecursive(3));
System.out.println(climbStairsWithRecursive1(3));
System.out.println(climbStairsWithRecursive2(3));
}
public static int climbStairsWithRecursive(int n) {
if(n==1) return 1;
if(n==2) return 2;
return climbStairsWithRecursive(n-1)+climbStairsWithRecursive(n-2);
}
private static Map<Integer,Integer> storeMap=new HashMap<>();
public static int climbStairsWithRecursive1(int n) {
if(n==1) return 1;
if(n==2) return 2;
if(storeMap.get(n)!=null) {
return storeMap.get(n);
}else {
int result=climbStairsWithRecursive1(n-1)+climbStairsWithRecursive1(n-2);
storeMap.put(n,result);
return result;
}
}
public static int climbStairsWithRecursive2(int n) {
if(n==1) return 1;
if(n==2) return 2;
int result=0;
int pre=2;
int prePre=1;
for(int i=3;i<=n;i++) {
result=pre+prePre;
prePre=pre;
pre=result;
}
return result;
}
}