70.爬楼梯 https://leetcode-cn.com/problems/climbing-stairs/

假设你正在爬楼梯。需要 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 阶

You are climbing a stair case. It takes n steps to reach to the top.

Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?

Example 1:

Input: 2
Output: 2
Explanation: There are two ways to climb to the top.
1. 1 step + 1 step
2. 2 steps

Example 2:

Input: 3
Output: 3
Explanation: There are three ways to climb to the top.
1. 1 step + 1 step + 1 step
2. 1 step + 2 steps
3. 2 steps + 1 step

Constraints:

  • 1 <= n <= 45

题解:

1. 动态规划法求解:

本问题其实常规解法可以分成多个子问题,爬第n阶楼梯的方法数量,等于 2 部分之和:a. 爬上` n-1` 阶楼梯的方法数量q。因为再爬1阶就能到第n阶b. 爬上` n-2` 阶楼梯的方法数量p。因为再爬2阶就能到第n阶
所以我们得到公式 r = p + q
同时需要初始化 r=1 和p=0,q=0。
注意:初始值的设置和循环条件有关系。

时间复杂度:O(n)
C语言解法:

int climbStairs(int n){int p = 0, q = 0, r = 1;for (int i = 1; i <= n; ++i) {p = q; q = r; r = p + q;}return r;
}

2. 斐波那契数列
如果观察数学规律,可知本题是斐波那契数列,那么用斐波那契数列的公式即可解决问题,公式如下:

时间复杂度:O(logn)

Java实现:

class Solution {public int climbStairs(int n) {double sqrt_5 = Math.sqrt(5);double fib_n = Math.pow((1 + sqrt_5) / 2, n + 1) - Math.pow((1 - sqrt_5) / 2,n + 1);return (int)(fib_n / sqrt_5);}
}

声明:感谢画手大鹏提供的思路: https://leetcode-cn.com/problems/climbing-stairs/solution/hua-jie-suan-fa-70-pa-lou-ti-by-guanpengchn/

[算法笔记] 爬楼梯相关推荐

  1. 【每日一算法】爬楼梯

    微信改版,加星标不迷路! 每日一算法-爬楼梯 作者:阿广 阅读目录 ? 题目 ? 解析 ? 完整代码 1 题目 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多 ...

  2. 动态规划算法-01爬楼梯问题

    爬楼梯问题 动态规划 动态规划算法将带求解问题拆分成一系列相互交叠的子问题,通过递推关系定义各子问题的求解策略,并随时记录子问题的解,最终获得原始问题的解,避免了对交叠子问题的重复求解. 在动态规划算 ...

  3. python侯先生爬楼梯_经典算法题:爬楼梯 ,以斐波那契数列来解题代码案例

    网上这题的解题思路主要有两种:动态规划 斐波那契数列 因为我们用斐波那契数列来解,所以我主要描述方法2. 斐波那契数列 又称 兔子数列, 指得是:1.1.2.3.5.8.13.21.--, 在数学上它 ...

  4. 算法题目——爬楼梯(动态规划)

    题目链接:70.爬楼梯 类似题目:1646.获取生成数组中最大值 本题大家如果没有接触过的话,会感觉比较难,多举几个例子,就可以发现其规律. 爬到第一层楼梯有一种方法,爬到二层楼梯有两种方法. 那么第 ...

  5. 面试经典算法题--爬楼梯 的六种解法

    题目描述: 假设你正在爬楼梯,需要n步你才能到达顶部.但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶部? 六种解法: /*** 爬楼梯问题其实质就是斐波那契数列!*/ public cla ...

  6. leetcode算法题--爬楼梯

    原题链接:https://leetcode-cn.com/problems/climbing-stairs/ 1.动态规划 dp[i]表示爬到第i个阶梯的方法数 状态转移 dp[i]+=dp[i-k] ...

  7. leetcode算法70.爬楼梯

  8. python爬楼梯问题_爬楼梯算法的数学思路

    爬楼梯算法的数学思路 今日腾讯实习面试,问到一题算法. 爬楼梯问题:一个楼梯一共n个台阶,一次上1或者2个台阶.问,一共多少种解法. 这个问题,当时学递归的时候,我记得做过.但是已经一年半没写过递归和 ...

  9. 明翰数据结构与算法笔记V0.8(持续更新)

    文章目录 前言 数据结构 `线性表` `数组` `链表` `栈与队列` [串/字符串] 树 并查集 `二叉树` [二叉排序树/二叉搜索树] `红黑树` 红黑树操作 霍夫曼树 `堆` [大/小]根堆 可 ...

最新文章

  1. (六)OpenStack---M版---双节点搭建---Neutron安装和配置
  2. python在审计中的应用-基于python的自动化代码审计
  3. js observer 添加_简单了解4种JS设计模式
  4. c++之静态成员详细介绍
  5. 如何让context attribute不出现在configuration界面的available fields列表内
  6. python传递参数格式_Python语言学习基础篇之Python发送Post请求之根据参数位置传参、数据类型、不同方式传参...
  7. oracle 数字处理函数,Oracle函数-单行函数-数字、日期、日期处理函数
  8. redis 缓存 @class: 会有 $hibernateproxy_微信亿级在线点赞系统,用Redis如何实现?
  9. CSS 小结笔记之伸缩布局 (flex)
  10. html让一行文字在两行,css单行两行文本自适应问题
  11. 信号与系统_冲激函数匹配法
  12. 使用Nmap扫描目标主机
  13. android 激光打印机,#本站首晒# 安卓端无线打印的方案选择 兄弟 DCP1618W 一体机...
  14. Linux系统安装迷你世界,迷你世界国际服下载安装
  15. 孟德尔随机化——如何选择工具变量
  16. 小米一面经验分享,面试编程题
  17. scarpy-爬取链家所有成交数据
  18. 华东理工大学计算机学院考研考什么,华东理工大学计算机专业基础综合2020考研考试大纲...
  19. [日常训练] 藏宝路径
  20. 使用eBPF将网络功能Offload到网卡

热门文章

  1. 实现Evernote的OAuth授权
  2. Linux下的Cacti网络管理系统---安装(二)
  3. PS制作立体效果——圆柱
  4. 判断C#中的字符串是否是数字,如果是转换成int类型
  5. 整理blog,回味过去的点滴
  6. 【数据结构与算法】之深入解析“实现strStr()”的求解思路与算法示例
  7. 【数据结构与算法】之深入解析“石子游戏VII”的求解思路与算法示例
  8. Metal之基本简介及常用组件说明
  9. 1134:合法C标识符查
  10. 征战蓝桥 —— 2015年第六届 —— C/C++A组第5题——九数组分数