当前位置: 面试刷题>> 爬楼梯(经典算法150题)


**题目描述补充**: 假设你正在爬楼梯。需要 n 步你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。 **解题思路**: 这个问题可以使用动态规划(Dynamic Programming)的方法来解决。我们可以定义一个数组 `dp`,其中 `dp[i]` 表示到达第 `i` 阶楼梯的方法数。根据题目描述,我们知道到达第 `i` 阶楼梯可以由以下两种方式之一得到: 1. 从第 `i-1` 阶楼梯爬 1 步上来。 2. 从第 `i-2` 阶楼梯爬 2 步上来(如果 `i-2` 是非负的)。 因此,我们可以得到状态转移方程: ``` dp[i] = dp[i-1] + dp[i-2] (当 i > 2) ``` 同时,初始条件为: ``` dp[1] = 1 # 只有一种方法到达第1阶楼梯,就是直接爬1步 dp[2] = 2 # 有两种方法到达第2阶楼梯,一种是直接爬2步,另一种是分两次爬1步 ``` **PHP代码示例**: ```php function climbStairs($n) { if ($n <= 1) { return $n; } $dp = array_fill(1, $n + 1, 0); $dp[1] = 1; $dp[2] = 2; for ($i = 3; $i <= $n; $i++) { $dp[$i] = $dp[$i - 1] + $dp[$i - 2]; } return $dp[$n]; } // 示例用法 echo climbStairs(5); // 输出: 8 ``` **Python代码示例**: ```python def climbStairs(n): if n <= 1: return n dp = [0] * (n + 1) dp[1] = 1 dp[2] = 2 for i in range(3, n + 1): dp[i] = dp[i - 1] + dp[i - 2] return dp[n] # 示例用法 print(climbStairs(5)) # 输出: 8 ``` **JavaScript代码示例**: ```javascript function climbStairs(n) { if (n <= 1) { return n; } let dp = new Array(n + 1).fill(0); dp[1] = 1; dp[2] = 2; for (let i = 3; i <= n; i++) { dp[i] = dp[i - 1] + dp[i - 2]; } return dp[n]; } // 示例用法 console.log(climbStairs(5)); // 输出: 8 ``` 以上代码示例分别用PHP、Python和JavaScript实现了爬楼梯问题的解决方案,并通过动态规划的方法求解了到达楼顶的不同方法数。这些代码片段可以直接在相应的环境中运行并验证结果。
推荐面试题