C代码
#define DPSIZE 3
int get_index(int i) {
return i % DPSIZE;
}
int climbStairs(int n){
int i;
int *dp = NULL;
int ret = 0;
if (n < 2) {
return n;
}
dp = calloc(DPSIZE, sizeof(int));
dp[0] = 1;
dp[1] = 1;
for(i = 2; i < n+1; i++) {
dp[get_index(i)] = dp[get_index(i-1)] + dp[get_index(i-2)];
}
ret = dp[get_index(n)];
free(dp);
dp = NULL;
return ret;
}
注意点
- 分析少于两个台阶的情况,直接
return n
; - 分析两个台阶的情况:
子问题1:从0到2,为一种情况,即dp[0] = 1
;子问题2:从1到2,为一种情况,即dp[1] = 1
;- 得到状态方程:
dp[n] = dp[n-1] + dp[n-2];