LeetCode 70. Climbing Stairs [Easy]
题目来源:https://leetcode.com/problems/climbing-stairs
题目难度:Easy
题目
You are climbing a staircase. It takes n
steps to reach 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:
1 | Input: n = 2 |
Example 2:
1 | Input: n = 3 |
思路
如果 n == 0,那么方式为 0 种。
如果 n == 1,那么方式为 1 种。
如果 n == 2,那么方式为 2 种,一种是走两次 1 步,使用序列表示就是 [1, 1]
,还有一种就是直接走 2 步,使用序列表示就是 [2]
。
如果 n == 3,那么有 3 种,[1, 1, 1]
、[1, 2]
、[2, 1]
。
实际上就是要求,找到所有和为 n 的序列,且序列中只能出现 1
和 2
。只要两个序列不相同,那么就可以看作是两种不同的方式。
对于 n > 2 的情况,我们可以把问题分为,走到 n-1
和 走到 n-2
时分别有多少种方式?即,序列的最后一步我们已经确定了,[?, 1]
和 [?, 2]
,我们把走到 n-1
和走到 n-2
的方式数加起来,就是走到 n
的总方式。
解答1[Java]:
1 | public class Solution { |
思路
动态规划。
解答2[Java]:
1 | public class Solution { |
思路
斐波那契数。
比上一个算法优化的地方在于空间复杂度由 $O(n)$ 变为 $O(1)$。