📝 题目描述
题目链接:杨辉三角
给定一个非负整数 numRows,生成“杨辉三角”的前 numRows 行。
在**“杨辉三角”**中,每个数是它左上方和右上方的数的和。
示例:
1 | 示例 1: |
提示:
1 <= numRows <= 30
💡 解题思路
方法一:暴力解法
暴力解法
方法二:优化解法
优化解法
🔧 代码实现
1、暴力解法
1 | class Solution { |
2、优化解法
1 | class Solution { |
📊 复杂度分析
1、暴力解法
- 时间复杂度:
- 空间复杂度:
2、优化解法
- 时间复杂度:
- 空间复杂度:
🎯 总结
- 核心思想:
文章作者: azuki
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 很多时候不懂事!
相关推荐
2026-04-18
LeetCode77 - 买卖股票的最佳时机
📝 题目描述 题目链接:买卖股票的最佳时机 给定一个数组 prices,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0。 示例: 123456789101112示例 1:输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。示例 2:输入:prices = [7,6,4,3,1]输出:0解释:在这种情况下, 没有交易完成, 所以最大利润为 0。 提示: 1 <= prices.length <= 10^5 0 <= prices[i] <= 10^4 💡 解题思路 方法一:贪心算法 假设给定的数组为:[7, 1, 5,...
2026-04-20
LeetCode81 - 爬楼梯
📝 题目描述 题目链接:爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 示例: 12345678910111213141516示例 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 💡 解题思路 方法一:动态规划 我们用 f(x)f(x)f(x) 表示爬到第 xxx 级台阶的方案数,考虑最后一步可能跨了一级台阶,也可能跨了两级台阶,所以我们可以列出如下式子: f(x)=f(x−1)+f(x−2)f(x)=f(x−1)+f(x−2) f(x)=f(x−1)+f(x−2) 它意味着爬到第 xxx 级台阶的方案数是爬到第 x−1x−1x−1 级台阶的方案数和爬到第 x−2x−2x−2 级台阶的方案数的和。很好理解,因为每次只能爬 111 级或 222 级,所以 f...
2026-04-06
LeetCode63 - 搜索插入位置
📝 题目描述 题目链接:搜索插入位置 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(logn)O(log n)O(logn) 的算法。 示例: 1234567891011121314示例 1:输入: nums = [1,3,5,6], target = 5输出: 2示例 2:输入: nums = [1,3,5,6], target = 2输出: 1示例 3:输入: nums = [1,3,5,6], target = 7输出: 4 提示: 1 <= nums.length <= 10^4 -10^4 <= nums[i] <= 10^4 nums 为 无重复元素 的 升序 排列数组 -10^4 <= target <= 10^4 💡 解题思路 方法一:二分查找 题目通过非常简单,使用基础的二分查找即可通过所有测试用例,这里分析一下为什么返回 i 而不是 j。 核心结论: 在代码中,循环的终止条件是 i > j(具体来说,循环结束...
2026-04-19
LeetCode78 - 跳跃游戏
📝 题目描述 题目链接:跳跃游戏 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false。 示例: 1234567891011示例 1:输入:nums = [2,3,1,1,4]输出:true解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。示例 2:输入:nums = [3,2,1,0,4]输出:false解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。 提示: 1 <= nums.length <= 10^4 0 <= nums[i] <= 10^5 💡 解题思路 方法一:贪心算法 刚看到本题一开始可能想:当前位置元素如果是 3,我究竟是跳一步呢,还是两步呢,还是三步呢,究竟跳几步才是最优呢? 其实跳几步无所谓,关键在于可跳的覆盖范围!不一定非要明确一次究竟跳几步,每次取最大的跳跃步数,这个就是...
2026-03-26
LeetCode42 - 将有序数组转换为二叉搜索树
📝 题目描述 题目链接:将有序数组转换为二叉搜索树 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 平衡二叉搜索树。 二叉搜索树:左子树上所有节点的值都小于根节点的值;右子树上所有节点的值都大于根节点的值;左右子树也分别为二叉搜索树。 平衡二叉树:该树所有节点的左右子树的高度相差不超过 1。 示例: 示例 1: 123输入:nums = [-10,-3,0,5,9]输出:[0,-3,9,-10,null,5]解释:[0,-10,5,null,-3,null,9] 也将被视为正确答案: 示例 2: 123输入:nums = [1,3]输出:[3,1]解释:[1,null,3] 和 [3,1] 都是高度平衡二叉搜索树。 提示: 1 <= nums.length <= 10^4 -10^4 <= nums[i] <= 10^4 nums 按 严格递增 顺序排列 💡 解题思路 方法一:中序遍历 题目所给的数组其实就是二叉搜索树的中序遍历,我们很容易想到使用二分法 + 递归构建平衡二叉搜索树。 首先使用二分法选择中间...
2026-04-19
LeetCode79 - 跳跃游戏 II
📝 题目描述 题目链接:跳跃游戏 II 给定一个长度为 n 的 0 索引整数数组 nums。初始位置在下标 0。 每个元素 nums[i] 表示从索引 i 向后跳转的最大长度。换句话说,如果你在索引 i 处,你可以跳转到任意 (i + j) 处: 0 <= j <= nums[i] 且 i + j < n 返回到达 n - 1 的最小跳跃次数。测试用例保证可以到达 n - 1。 示例: 1234567891011示例 1:输入: nums = [2,3,1,1,4]输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。 从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。示例 2:输入: nums = [2,3,0,1,4]输出: 2 提示: 1 <= nums.length <= 10^4 0 <= nums[i] <= 1000 题目保证可以到达 n - 1 💡 解题思路 方法一:贪心算法 其实核心思想只有一句话: 在当前可达范围内,找到下一步可达的最大范围。 从覆盖范围出发,不...