Leetcode 70.爬楼梯
题目描述:
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。
示例 1:
输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。
1. 1 阶 + 1 阶
2. 2 阶
示例 2:
输入: 3
输出: 3
解释: 有三种方法可以爬到楼顶。
1. 1 阶 + 1 阶 + 1 阶
2. 1 阶 + 2 阶
3. 2 阶 + 1 阶
很明显的动态规划的题目:
看出来是因为在前一个阶段到后一个阶段之间的递推关系明显
代码和斐波那契数列的求解方式类似
但是编译以后代码有错误
自己写的代码:
int climbStairs(int n){
//最后实际得到的跳台阶数字就是前一个加上前前一个
int result[100];
if(n==0||n==1)
return 0;
else
{
result[0]=2;
result[1]=3;
for(int i=2;i<100;i++)
{
result[i]=result[i-1]+result[i-2];
}
}
return result[n-2];
}
错误提示:
Line 12: Char 26: runtime error: signed integer overflow: 7540113804746346429 + 4660046610375530309 cannot be represented in type 'long long int' (solution.c)
上述错误表示:运行时错误:有符号整数溢出:1836311903 + 1134903170不能用类型'int'表示(solution.c)
主要原因是c语言中数组空间的创建和申请需要另外申明,不是直接使用就可以
正确代码:
int climbStairs(int n){
//最后实际得到的跳台阶数字就是前一个加上前前一个
int result[10000];
result[1]=1;
result[2]=2;
for(int i=3;i<=n;i++)
{
result[i]=result[i-1]+result[i-2];
}
return result[n];
}
做题过程中没有想到
for(int i=3;i<=n;i++)中的终止条件就是要求n,只要把n作为终止条件求到的值就是最后要求的值