LeetCode & 118-Pascal's Triangle-Easy
2024-10-11 21:47:28
Array
Description:
Given numRows, generate the first numRows of Pascal's triangle.
For example, given numRows = 5,
Return[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
这题依旧没写出来,看到要返回的是List<List<Integer>>
直接就蒙了。感想就是,我好菜好菜好菜,一定一定要看Java源码!然后恶补了Arraylist源码,再次感叹Best Solution比我厉害多了。
Best Solution:
public class Solution {
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> list = new ArrayList<List<Integer>>();
ArrayList<Integer> row = new ArrayList<Integer>();
for (int i = 0; i < numRows; i++) {
// 注意每次在队首加1,其他元素后移
row.add(0, 1);
for (int j = 1; j < i; j++) {
row.set(j, row.get(j) + row.get(j+1));
}
list.add(new ArrayList<Integer>(row));
}
return list;
}
}
刚开始没有理解这个解法的思想,因为对大循环不理解,row.add(index, element)
这一步很关键,把最新的这行数组复制了前一行内容,并在队首加1,其余元素后移,这样在row.set(index, element)
就很自然的将两元素值相加得到新的值。
在此说明在看源码过程中得到的收获:
Arraylist.add(index, element)
public void add(int index, E element) {
//判断索引位置是否正确
rangeCheckForAdd(index);
// 扩容检测
ensureCapacityInternal(size + 1); // Increments modCount!!
// 复制现有数组,后移一位
System.arraycopy(elementData, index, elementData, index + 1,
size - index);
elementData[index] = element;
size++;
}
Arraylist.add(element)
public boolean add(E e) {
// 从队尾插入
ensureCapacityInternal(size + 1); // Increments modCount!!
elementData[size++] = e;
return true;
}
此处主要区分:add(0,1)
和add(1)
的区别,一个在队首插入,一个队尾插入
Arraylist.set(index, element)
public E set(int index, E element) {
rangeCheck(index);
// 在index位置上替代,故先add才能set
E oldValue = elementData(index);
elementData[index] = element;
return oldValue;
}
最新文章
- ZFPlayer 源码解读
- 从CSS实现正片叠底看=>;混合模式mix-blend-mode
- Tomcat启动时自动加载Servlet
- java和android及IOS对接RSA加密经验
- Cwinux源码解析(四)
- 关于C# winform中使用pictureBox显示大红叉的原因
- WebForm---增删改(内置对象)
- eclipse4.x 启动之后, ";Initializing Java Tooling"; 卡住问题解决
- 其他常用HTML 片段
- .NET 命名规范 代码示例
- python scp
- 【智能家居篇】wifi在智能家居中的应用
- mysql增量备份 percona-xtrabackup
- anyremote源码分析
- 高斯RBF核函数中Sigma取值和SVM分离面的影响
- git文件夹下项目更改ip地址小结
- POJ 2065 SETI [高斯消元同余]
- [mysql5.6] 主从更换ip之后重新建立同步
- 使用 Windows PowerShell 实现 Web UI 自动化 (转)
- 论YUV422(YUYV)与YUV420相互转换
热门文章
- JS合并两个数组的方法
- Log4Net五部曲
- python第二篇博客,关于数据类型的详细讲解
- Linux设备驱动框架设计
- java web 项目中获取当前路径的几种方法
- 第三方工具 - echarts中 设置x||y轴文案、提示文字等为固定字数,超出显示";...";
- svn版本提交冲突问题解决详解
- 求第k小的元素
- js中, 用变量或对象作为if或其他条件的表达式
- Could not create the view: An unexpected exception was thrown的解决方法