zoukankan      html  css  js  c++  java
  • 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作为终止条件求到的值就是最后要求的值
  • 相关阅读:
    安装 Office Online Server2016
    HTML-冒泡算法
    shell 中的$0 $1 $* $@ $# $$ $? $() $(())
    线程池原理及C语言实现线程池
    彻底搞懂Reactor模型和Proactor模型
    TCP的三次握手与四次挥手理解及面试题
    socket关闭的close和shutdown区别
    C++ Virtual 完美诠释
    Linux学习之CentOS--Linux系统的网络环境配置
    Linux学习之CentOS--Linux网卡高级命令、IP别名及多网卡绑定
  • 原文地址:https://www.cnblogs.com/redzzy/p/13723798.html
Copyright © 2011-2022 走看看