1. 爬楼梯
int climbStairs(int n){
if(n==1)
return 1;
else if(n==2)
return 2;
else{
int i,init_1,init_2,ans;
init_1 = 1;
init_2 = 2;
ans = init_1 + init_2;
//n>3才使用循环
for(i=3;i<n;i++){
init_1 = init_2;
init_2 = ans;
ans = init_1 + init_2;
}
return ans;
}
}
2. 使用最小花费爬楼梯
dp[i]为到达i阶楼梯的最小花费
int minCostClimbingStairs(int* cost, int costSize){
int i;
int* dp = (int *)malloc(sizeof(int)*(costSize+1));
dp[0] = dp[1] = 0;
for(i=2;i<=costSize;i++){
dp[i] = dp[i-1]+cost[i-1]>=dp[i-2]+cost[i-2]?dp[i-2]+cost[i-2]:dp[i-1]+cost[i-1];
}
return dp[costSize];
}