leetcode.70.Climbing Stairs
来源:互联网 发布:老虎机算法作弊器 编辑:程序博客网 时间:2024/04/30 03:08
Description
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.
sln1
首先我们将
F(1) = 1F(2) = 2F(3) = 3F(4) = 5F(5) = 8
因为每次前进的楼梯数只能等于1或者2,所以我们到达第k个楼梯之前所处的楼梯只可能是k-1或k-2。因此,到底第k个楼梯的方法,等于到达第k-1个楼梯的方法加上到达k-1个楼梯的方法,即
且当k等于1的时候,F(1) = 1,k=2时,F(2) = 2,这个是初始条件。这么看来,到达每一层楼梯的方法数组成的数列,其实就是一个斐波那契数列,因此我们可以用求斐波那契数列的方法来求F(n)。python实现如下:
class Solution(object): def climbStairs(self, n): """ :type n: int :rtype: int """ ways = [1, 2] for i in xrange(2, n): ways.append(ways[i - 1] + ways[i - 2]) return ways[n - 1]
sln2
既然我们在sln1中已经发现,到达每一层楼梯的方法数组成的数列其实就是一个斐波那契数列,那么我们自然就可以用fibonacci数列公式来直接求F(n)。fibonacci数列公式参考维基百科。依旧观察sln1中我们列出的F(1)~F(5),将其与标准fibonacci数列对比,不难发现F(n) = fibonacci(n + 1)。因此在利用公式计算F(n)时,记得要对n做出相应调整(n=n+1)。
class Solution(object): def climbStairs(self, n): """ :type n: int :rtype: int """ theta = (1.0 + pow(5, 0.5)) / 2 n = n + 1 return int((pow(theta, n) - pow(-theta, -n)) / pow(5, 0.5))
0 0
- [LeetCode]70.Climbing Stairs
- LeetCode --- 70. Climbing Stairs
- [Leetcode] 70. Climbing Stairs
- [leetcode] 70.Climbing Stairs
- [leetCode]70. Climbing Stairs
- 70. Climbing Stairs LeetCode
- [LeetCode]70. Climbing Stairs
- 【LeetCode】70. Climbing Stairs
- leetcode 70. Climbing Stairs
- leetcode 70. Climbing Stairs
- LeetCode *** 70. Climbing Stairs
- 【LeetCode】70. Climbing Stairs
- LeetCode 70. Climbing Stairs
- leetcode 70. Climbing Stairs
- [LeetCode]70. Climbing Stairs
- 【LeetCode】70. Climbing Stairs
- LeetCode 70. Climbing Stairs
- #leetcode#70.Climbing Stairs
- C# 文件下载帮助类
- JS动态
- centos系统安装openstack
- [Deep Learning] TensorFlow模型、参数的保存与读取
- C# 文件上传帮助类
- leetcode.70.Climbing Stairs
- Mysql中产生指定范围随机整型数
- KNN算法介绍(最邻近规则分类算法)
- ActivitiAPI
- Mac上安装nginx
- 【遇到的异常】initializationError(Runner:JUnit 4)
- 转 原来Github上的README.md文件这么有意思——Markdown语言详解
- 剑指offer 和为s的连续正数序列
- Java中的main()方法详解