每日一道 LeetCode (28):杨辉三角
每天 3 分钟,走上算法的逆袭之路。
前文合集
代码仓库
GitHub: https://github.com/meteor1993/LeetCode
Gitee: https://gitee.com/inwsy/LeetCode
题目:杨辉三角
题目来源:https://leetcode-cn.com/problems/pascals-triangle/
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
在杨辉三角中,每个数是它左上方和右上方的数的和。
示例:
输入: 5
输出:
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
套路总结
好像又出现一个新的世界,不再是二叉树了,昨天的文章忘了做总结了,今天在这里补上吧。
看到二叉树的题目,应该要想到两点基本的解题方案,要么是做 迭代 ,要么是做 递归 。
这两种方式分别对应了 广度优先搜索 和 深度优先搜索 。
迭代 一般使用队列来做,每一次迭代是迭代一层的所有节点。
递归 则是先查找子树,先一股脑的递归到一个叶子节点,再往上反。
剩下的操作就要视题目场景而定了,我也没办法一概而定,遇到题目不会做就是做题还少,多做点题就会做了。
解题思路
杨辉三角,这道题我应该在近 10 年前上大学的时候,刚接触编程的时候做过。
上面题目中给出的图形可能不是很容易理解,它前后两行没有对齐,如果对齐以后是下面这样。
这个图其实已经把杨辉三角的特点以及计算方式画的很清晰了。
首先杨辉三角的几个特点我们来总结一下:
- 开头第一行永远只有一个数字 1 。
- 除了第一行,每一行的开头和结尾都是数字 1 ,这也导致第二行的数是两个 1 。
- 从第三行开始,除掉开头和结尾的两个 1 ,剩下的第
i
个位置的数字值是由上面一行的第i
位和第i - 1
位两个数字加起来而得到。
差不多,能看到这三个特点就能做这道题了。
解题答案
直接看代码吧,注释啥的我都写在代码上了,比较清晰,应该不会存在不理解的情况。
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> triangle = new ArrayList<List<Integer>>();
// 如果是 0 ,直接返回空
if (numRows == 0) {
return triangle;
}
// 直接给第一行赋值,永远是 1
triangle.add(new ArrayList<>());
triangle.get(0).add(1);
for (int i = 1; i < numRows; i++) {
// 定义当前行
List<Integer> row = new ArrayList<>();
// 定义上一行
List<Integer> prevRow = triangle.get(i - 1);
// 当前行开头为 1
row.add(1);
// 计算每一个数值,结果是上一行的 j 和 j + 1 位置的和
for (int j = 1; j < i; j++) {
row.add(prevRow.get(j - 1) + prevRow.get(j));
}
// 当前行添加末尾数字 1
row.add(1);
// 把当前行添加到要返回的列表中
triangle.add(row);
}
return triangle;
}
这段代码看不懂就真的千不该万不该了,逻辑很清晰,完全顺序逻辑,从第一行开始构造,代码中的 for
循环是用来构造每一层的结构,构造完成后添加到最终要返回的那个列表中。
属实看不懂的话自己加一个 main
方法,多 debug 几次,懂了以后一定要自己不看代码自己实现一遍,加深记忆。
作者:极客挖掘机
定期发表作者的思考:技术、产品、运营、自我提升等。
本文版权归作者极客挖掘机和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
如果您觉得作者的文章对您有帮助,就来作者个人小站逛逛吧:极客挖掘机
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
2019-08-27 跟我学SpringCloud | 第十五篇:微服务利剑之APM平台(一)Skywalking