需要使用动态规划+滚动数组,滚动数组每次使用固定的几个空间,来达到压缩,节省储存空间的目的,主要用在递推和动态规划中。
int climbStairs(int n){
int i;
int *dp = (int *)malloc(3*sizeof(int));
int res;
if(!(n-1))
return 1;
dp[0] = 1; //dp滚动数组,以压缩空间
dp[1] = 1;
dp[2] = 2;
for(i = 2;i < n;i++){
dp[0] = dp[1];
dp[1] = dp[2];
dp[2] = dp[0] + dp[1];//状态转移方程:f(n) = f(n-1)+f(n-2)
}
res = dp[2];
free(dp);
dp = NULL;
return res;
}