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作为终止条件求到的值就是最后要求的值
原文地址:https://www.cnblogs.com/redzzy/p/13723798.html