题目描述:
假设你正在爬楼梯。需要 n
阶你才能到达楼顶。
每次你可以爬 1
或 2
个台阶。你有多少种不同的方法可以爬到楼顶呢?
题解:
class Solution {
public:
int climbStairs(int n) {
vector<int> nums(n+2);//出错点
nums[1]=1;
nums[2]=2;
for(int i=3;i<=n;i++){
nums[i]=nums[i-1]+nums[i-2];
}
return nums[n];
}
};
解题思路:跳到第n个台阶有两种情况:从第n-1个台阶跳一个台阶上来;从第n-2个台阶跳两个台阶上来。所以f(n)=f(n-1)+f(n-2),n>2。考虑f(1)=1,f(2)=2。
出错点:初始化nums数组大小为n+2。当初始化为n+1时,系统报执行错误,溢出(overflow)。具体原因有待思考...