题目:
假设你正在爬楼梯。需要 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 阶
来源:力扣(LeetCode)
解答:
1 class Solution: 2 def climbStairs(self, n: int) -> int: 3 g = 0 4 f = 1 5 while n > -1: 6 g = g + f 7 f = g - f 8 n -= 1 9 return g
1 class Solution: 2 def climbStairs(self, n: int) -> int: 3 a = 1 4 b = 1 5 for _ in range(n - 1): 6 a, b = b, a + b 7 return b
# https://leetcode-cn.com/problems/climbing-stairs/solution/70-climbing-stairs-dong-tai-gui-hua-fei-bo-na-qi-s
1 class Solution: 2 def climbStairs(self, n: int) -> int: 3 if n < 2: 4 return n 5 6 dp = [0] * n 7 dp[0] = 1 8 dp[1] = 2 9 10 for i in range(2, n): 11 dp[i] = dp[i - 1] + dp[i - 2] 12 13 return dp[-1]
1 class Solution: 2 # 作者:QQqun902025048 3 # 链接:https://leetcode-cn.com/problems/two-sum/solution/2-xing-python-dong-tai-gui-hua-by-knifezhu/ 4 5 # dp递归方程:到达当前楼梯的路径数 = 到达上个楼梯的路径数 + 到达上上个楼梯的路径数 6 # 这里用一个元组 r 来储存(当前楼梯路径数,下一层楼梯路径数) 7 # 利用 reduce 来代替for循环 8 def climbStairs(self, n: int) -> int: 9 from functools import reduce 10 return reduce(lambda r, _: (r[1], sum(r)), range(n), (1, 1))[0]
1 class Solution: 2 def climbStairs(self, n: int) -> int: 3 return self.climbStairsImpl(n) 4 5 def climbStairsImpl(self, n: int, memo={}) -> int: 6 if n < 3: 7 return n 8 if n in memo: 9 return memo[n] 10 else: 11 tmp = self.climbStairsImpl(n - 1, memo) + self.climbStairsImpl(n - 2, memo) 12 memo[n] = tmp 13 return tmp
原文:https://www.cnblogs.com/catyuang/p/11178886.html