[算法笔记] 爬楼梯
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 题目 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多 ...
- 动态规划算法-01爬楼梯问题
爬楼梯问题 动态规划 动态规划算法将带求解问题拆分成一系列相互交叠的子问题,通过递推关系定义各子问题的求解策略,并随时记录子问题的解,最终获得原始问题的解,避免了对交叠子问题的重复求解. 在动态规划算 ...
- python侯先生爬楼梯_经典算法题:爬楼梯 ,以斐波那契数列来解题代码案例
网上这题的解题思路主要有两种:动态规划 斐波那契数列 因为我们用斐波那契数列来解,所以我主要描述方法2. 斐波那契数列 又称 兔子数列, 指得是:1.1.2.3.5.8.13.21.--, 在数学上它 ...
- 算法题目——爬楼梯(动态规划)
题目链接:70.爬楼梯 类似题目:1646.获取生成数组中最大值 本题大家如果没有接触过的话,会感觉比较难,多举几个例子,就可以发现其规律. 爬到第一层楼梯有一种方法,爬到二层楼梯有两种方法. 那么第 ...
- 面试经典算法题--爬楼梯 的六种解法
题目描述: 假设你正在爬楼梯,需要n步你才能到达顶部.但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶部? 六种解法: /*** 爬楼梯问题其实质就是斐波那契数列!*/ public cla ...
- leetcode算法题--爬楼梯
原题链接:https://leetcode-cn.com/problems/climbing-stairs/ 1.动态规划 dp[i]表示爬到第i个阶梯的方法数 状态转移 dp[i]+=dp[i-k] ...
- leetcode算法70.爬楼梯
- python爬楼梯问题_爬楼梯算法的数学思路
爬楼梯算法的数学思路 今日腾讯实习面试,问到一题算法. 爬楼梯问题:一个楼梯一共n个台阶,一次上1或者2个台阶.问,一共多少种解法. 这个问题,当时学递归的时候,我记得做过.但是已经一年半没写过递归和 ...
- 明翰数据结构与算法笔记V0.8(持续更新)
文章目录 前言 数据结构 `线性表` `数组` `链表` `栈与队列` [串/字符串] 树 并查集 `二叉树` [二叉排序树/二叉搜索树] `红黑树` 红黑树操作 霍夫曼树 `堆` [大/小]根堆 可 ...
最新文章
- (六)OpenStack---M版---双节点搭建---Neutron安装和配置
- python在审计中的应用-基于python的自动化代码审计
- js observer 添加_简单了解4种JS设计模式
- c++之静态成员详细介绍
- 如何让context attribute不出现在configuration界面的available fields列表内
- python传递参数格式_Python语言学习基础篇之Python发送Post请求之根据参数位置传参、数据类型、不同方式传参...
- oracle 数字处理函数,Oracle函数-单行函数-数字、日期、日期处理函数
- redis 缓存 @class: 会有 $hibernateproxy_微信亿级在线点赞系统,用Redis如何实现?
- CSS 小结笔记之伸缩布局 (flex)
- html让一行文字在两行,css单行两行文本自适应问题
- 信号与系统_冲激函数匹配法
- 使用Nmap扫描目标主机
- android 激光打印机,#本站首晒# 安卓端无线打印的方案选择 兄弟 DCP1618W 一体机...
- Linux系统安装迷你世界,迷你世界国际服下载安装
- 孟德尔随机化——如何选择工具变量
- 小米一面经验分享,面试编程题
- scarpy-爬取链家所有成交数据
- 华东理工大学计算机学院考研考什么,华东理工大学计算机专业基础综合2020考研考试大纲...
- [日常训练] 藏宝路径
- 使用eBPF将网络功能Offload到网卡
热门文章
- 实现Evernote的OAuth授权
- Linux下的Cacti网络管理系统---安装(二)
- PS制作立体效果——圆柱
- 判断C#中的字符串是否是数字,如果是转换成int类型
- 整理blog,回味过去的点滴
- 【数据结构与算法】之深入解析“实现strStr()”的求解思路与算法示例
- 【数据结构与算法】之深入解析“石子游戏VII”的求解思路与算法示例
- Metal之基本简介及常用组件说明
- 1134:合法C标识符查
- 征战蓝桥 —— 2015年第六届 —— C/C++A组第5题——九数组分数