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;
}

最新文章

  1. ZFPlayer 源码解读
  2. 从CSS实现正片叠底看=&gt;混合模式mix-blend-mode
  3. Tomcat启动时自动加载Servlet
  4. java和android及IOS对接RSA加密经验
  5. Cwinux源码解析(四)
  6. 关于C# winform中使用pictureBox显示大红叉的原因
  7. WebForm---增删改(内置对象)
  8. eclipse4.x 启动之后, &quot;Initializing Java Tooling&quot; 卡住问题解决
  9. 其他常用HTML 片段
  10. .NET 命名规范 代码示例
  11. python scp
  12. 【智能家居篇】wifi在智能家居中的应用
  13. mysql增量备份 percona-xtrabackup
  14. anyremote源码分析
  15. 高斯RBF核函数中Sigma取值和SVM分离面的影响
  16. git文件夹下项目更改ip地址小结
  17. POJ 2065 SETI [高斯消元同余]
  18. [mysql5.6] 主从更换ip之后重新建立同步
  19. 使用 Windows PowerShell 实现 Web UI 自动化 (转)
  20. 论YUV422(YUYV)与YUV420相互转换

热门文章

  1. JS合并两个数组的方法
  2. Log4Net五部曲
  3. python第二篇博客,关于数据类型的详细讲解
  4. Linux设备驱动框架设计
  5. java web 项目中获取当前路径的几种方法
  6. 第三方工具 - echarts中 设置x||y轴文案、提示文字等为固定字数,超出显示&quot;...&quot;
  7. svn版本提交冲突问题解决详解
  8. 求第k小的元素
  9. js中, 用变量或对象作为if或其他条件的表达式
  10. Could not create the view: An unexpected exception was thrown的解决方法