public class Solution {
public int climbStairs(int n) {
if(n == 0){ //n为零,零种走法
return 0;
}
if(n == 1){ //n为一,一种走法
return 1;
}
if(n == 2){ //n为二,两种走法
return 2;
}
int[] mem = new int[n];
mem[0] = 1; //n为一,一种走法
mem[1] = 2; //n为二,两种走法
for(int i = 2 ; i <= n - 1 ; i++){
mem[i] = mem[i - 1] + mem[i - 2];
//这个循环会持续n-2次
//m[2]=m[1]+[0] m[3]=m[1]+m[2] m[4]=m[2]+m[3] ... m[n-1]=m[n-2]+m[n-3]
//从m[2]到m[n-1],一次一次算上去就不需要重复算了!!
}
return mem[n-1];
}
}
http://blog.csdn.net/xinglu31/article/details/24494801
盗用了这哥们的解解法,加了点注释。
dynamic programming关键还是要想到子问题~