leetcode解题之70 #Climbing Stairs Java版 (青蛙跳台阶)
来源:互联网 发布:win10仿mac os桌面 编辑:程序博客网 时间:2024/06/11 04:57
70. Climbing Stairs(跳台阶)
同青蛙跳台阶
70. Climbing Stairs
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?
Note: Given n will be a positive integer.
(1)一只青蛙一次可以跳上 1 级台阶,也可以跳上2 级。求该青蛙跳上一个n 级的台阶总共有多少种跳法。
(2)一只青蛙一次可以跳上1级台阶,也可以跳上2 级……它也可以跳上n 级,此时该青蛙跳上一个n级的台阶总共有多少种跳法?
分析:1)当n = 1, 只有1中跳法;当n = 2时,有两种跳法;当n = 3 时,有3种跳法;当n = 4时,有5种跳法;当n = 5时,有8种跳法;....... 规律类似于Fibonacci数列
// 超时,leetcode不通过public int climbStairs1(int n) {if (n == 1)return 1;if (n == 2)return 2;return climbStairs(n - 1) + climbStairs(n - 2);}
public int climbStairs(int n) {if (n == 1)return 1;if (n == 2)return 2;int one = 1;int two = 2;int res = 0;for (int i = 3; i <= n; i++) {res = one + two;one = two;two = res;}return res;}拓展:
一只青蛙一次可以跳上1级台阶,也可以跳上2 级……它也可以跳上n 级,此时该青蛙跳上一个n级的台阶总共有多少种跳法?
用Fib(n)表示青蛙跳上n阶台阶的跳法数,青蛙一次性跳上n阶台阶的跳法数1(n阶跳),设定Fib(0) = 1;
当n = 1 时, 只有一种跳法,即1阶跳:Fib(1) = 1;
当n = 2 时, 有两种跳的方式,一阶跳和二阶跳:Fib(2) = Fib(1) + Fib(0) = 2;
当n = 3 时,有三种跳的方式,第一次跳出一阶后,后面还有Fib(3-1)中跳法; 第一次跳出二阶后,后面还有Fib(3-2)中跳法;第一次跳出三阶后,后面还有Fib(3-3)中跳法
Fib(3) = Fib(2) + Fib(1)+Fib(0)=4;
当n = n 时,共有n种跳的方式,第一次跳出一阶后,后面还有Fib(n-1)中跳法; 第一次跳出二阶后,后面还有Fib(n-2)中跳法..........................
第一次跳出n阶后, 后面还有 Fib(n-n)中跳法.
Fib(n) = Fib(n-1)+Fib(n-2)+Fib(n-3)+..........+Fib(n-n)=Fib(0)+Fib(1)+Fib(2)+.......+Fib(n-1)
又因为Fib(n-1)=Fib(0)+Fib(1)+Fib(2)+.......+Fib(n-2)
两式相减得:Fib(n)-Fib(n-1)=Fib(n-1) =====》 Fib(n) = 2*Fib(n-1) n >= 2
递归等式如下:
矩阵的覆盖,用八个2*1的小矩阵去覆盖一个2*8的大矩阵。如下图所示:
第一个小矩阵可以有两种覆盖方法横着,那么此时,必须由第二个小矩阵也横着,剩下2*6的大矩阵;竖着,那么还剩下2*7的大矩阵需要覆盖。因此可得:f(8)=f(6)+f(7).
公式同青蛙跳台阶
- leetcode解题之70 #Climbing Stairs Java版 (青蛙跳台阶)
- 【九度】题目1388:跳台阶 && 【LeetCode】Climbing Stairs
- LeetCode(70) Climbing Stairs
- LeetCode(70) Climbing Stairs
- Leetcode Climbing Stairs 解题报告
- 【LeetCode】Climbing Stairs 解题报告
- LeetCode 之 Climbing Stairs
- LeetCode之Climbing Stairs
- leetcode 之 Climbing Stairs
- LeetCode之Climbing Stairs
- leetcode之Climbing Stairs
- leetcode之 climbing stairs
- 【Leetcode】之Climbing Stairs
- LeetCode之Climbing Stairs
- [Leetcode] Climbing Stairs (Java)
- 【Leetcode】Climbing Stairs JAVA
- [LeetCode][Java] Climbing Stairs
- leetcode:Climbing Stairs 【Java】
- Oracle 新建表空间和导入数据
- java中volatile关键字的含义
- BehaviorDesigner-Unity-行为树
- Docker使用-nginx
- Linux git服务器
- leetcode解题之70 #Climbing Stairs Java版 (青蛙跳台阶)
- CSS基本选择器
- 2017-03-13 单词学习
- ssh 连接缓慢解决方法
- SQL语句UPDATE
- 及其学习kNN算法matble实现
- 多校联盟#con1 埃蒙的时空航道
- 腾讯云技术大牛教你,MySQL内核深度优化
- 在机器学习中各分类方法的优缺点