口碑好网站建设开发,番禺市桥做网站公司,网页美工设计中职期末试卷,赣州网站建设大家好#xff01;我是曾续缘#x1f607; 今天是《LeetCode 热题 100》系列 发车第 81 天 动态规划第 1 题 ❤️点赞 #x1f44d; 收藏 ⭐再看#xff0c;养成习惯 爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法… 大家好我是曾续缘 今天是《LeetCode 热题 100》系列 发车第 81 天 动态规划第 1 题 ❤️点赞 收藏 ⭐再看养成习惯 爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢 示例 1 输入n 2
输出2
解释有两种方法可以爬到楼顶。
1. 1 阶 1 阶
2. 2 阶 示例 2 输入n 3
输出3
解释有三种方法可以爬到楼顶。
1. 1 阶 1 阶 1 阶
2. 1 阶 2 阶
3. 2 阶 1 阶提示 1 n 45 难度❤️ 解题方法
爬楼梯问题是一个经典的动态规划问题。我们可以使用动态规划的方法来解决这个问题。动态规划的基本思想是将原问题分解为子问题然后求解子问题最后将子问题的解组合得到原问题的解。
在爬楼梯问题中我们可以将问题分解为以下几个子问题
爬到第1阶楼梯有多少种方法爬到第2阶楼梯有多少种方法爬到第3阶楼梯有多少种方法 … n. 爬到第n阶楼梯有多少种方法
观察后发现爬到第n阶楼梯的方法数等于爬到第n-1阶楼梯的方法数加上爬到第n-2阶楼梯的方法数。因为每次只能爬1阶或2阶所以爬到第n阶楼梯只有两种选择从第n-1阶爬1阶到达或者从第n-2阶爬2阶到达。
根据这个规律我们可以使用一个数组f来存储爬到每一阶楼梯的方法数。数组f的长度为n2其中f[0]表示爬到第0阶楼梯的方法数f[1]表示爬到第1阶楼梯的方法数以此类推f[n]表示爬到第n阶楼梯的方法数。
接下来我们需要初始化数组f将f[0]设为1表示爬到第0阶楼梯只有一种方法即不爬。然后我们遍历数组f从第1个元素开始依次计算爬到每一阶楼梯的方法数。具体地对于数组f中的每个元素f[i]我们将其值更新为f[i-1]和f[i-2]的和分别表示从第i-1阶楼梯爬1阶到达和从第i-2阶楼梯爬2阶到达的方法数之和。
最后我们返回数组f中的最后一个元素f[n]即为爬到第n阶楼梯的方法数。
Code
public class Solution {public int climbStairs(int n) {// 创建一个长度为n2的数组f用于存储爬到每一阶楼梯的方法数int[] f new int[n 2];// 将数组f的所有元素初始化为0Arrays.fill(f, 0);// 将数组f的第一个元素设为1表示爬到第0阶楼梯只有一种方法即不爬f[0] 1;// 遍历数组f从第1个元素开始依次计算爬到每一阶楼梯的方法数for (int i 0; i n; i) {// 将当前元素的值更新为前两个元素的和分别表示从第i-1阶楼梯爬1阶到达和从第i-2阶楼梯爬2阶到达的方法数之和f[i 1] f[i];f[i 2] f[i];}// 返回数组f中的最后一个元素即为爬到第n阶楼梯的方法数return f[n];}
}