http://oj.leetcode.com/problems/climbing-stairs/
You are climbing a stair case. It takes n steps to reach to the top.
Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?
递归解法
public class Solution { public int climbStairs(int n) { if(n==0) return 0; if(n==1) return 1; if(n==2) return 2; return FClimbStairs(n); } private int FClimbStairs(int n) { // TODO Auto-generated method stub if(n==1) return 1; if(n==2) return 2; return FClimbStairs(n-1)+FClimbStairs(n-2); } }
非递归解法
public class Solution { public int climbStairs(int n) { if(n==0) return 0; if(n==1) return 1; if(n==2) return 2; int[] re = new int[n+1]; re[0]=0; re[1]=1; re[2]=2; for(int i=3;i<n+1;i++){ re[i]=re[i-1]+re[i-2]; } return re[n]; } }