| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> Leetcode---爬楼梯 -> 正文阅读 |
|
[数据结构与算法]Leetcode---爬楼梯 |
问题描述: 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 示例 1: 输入:n = 2 输入:n = 3 提示: 1 <= n <= 45 来源:力扣(LeetCode) 解题: n=1? ?==> 1 n=2? ?==>1+1 / 2 n=3? ==>到达第三层只能从第一层或者第二层到达,所以1+2 n=4 ==>到达第四层只能从第二层或者第三层到达,所以2+3 依次类推:f(n) = f(n-1)+f(n-2) 1.拿到这道题,第一个冒出来的想法就是用暴力递归写。提交发现超时。 n=45时,2^45==>大概会计算这么多次
2.记忆化递归,通过一个数组来记录已经计算过的结果,减少计算次数。 O(n)
3.再分析,发现是一个典型的动态规划题(自底向上)
4.联想斐波那契数列,再优化
5.公式解:Binet's Formula 这个解法我也不晓得,看了别人的写法。可以背下来,如果要推原理的话,需要用到矩阵的知识。 f(n) = f(n-1) + f(n-2) ? ? ? ? 那么可以得到特征方程: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? x^2 = x^1 + x^0 ? ? ? ? 方程的两个解为:x1=[1-5^(1/2)]/2? ?x2=[1+5^(1/2)]/2 ? ? ? ? 不妨设通向公式为: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? f(n) = c1x1^n+c2x2^n ? ? ? ? 由于f(1) = 1、f(2) = 1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? c1 = 1/5^(1/2)? ? c2 = -1/5(1^2) ? ? ? ? 所以:f(n) =?1/5^(1/2)*{[1-5^(1/2)]/2} ^n +?-1/5(1^2)*{[1+5^(1/2)]/2} ^n ? ? ? ? 斐波那契第n项的结果为: ? ? ? ? ? ?? 我们的初始条件: f(1)=1? ? ?f(2)=2 ? ? ? ? ? ? ? ? ? ? ?由前面的公式算的f(n+1)为我们题目的f(n)的解
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 13:25:51- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |