这道题是LeetCode里的第118道题。
题目描述:
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
在杨辉三角中,每个数是它左上方和右上方的数的和。
示例:
输入: 5 输出: [ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1] ]
题目虽然看起来简单,而且大部分人都做过,但是本题使用的是 List 类。对 Java 不熟悉的可能还需要先去了解一下 List 类如何使用,比如二维链表的实例化我就找了找资料,结果发现没有那么的复杂!
对于杨辉三角任意位置 i, j 有:res[ i ][ j ] = res[ i - 1 ][ j - 1 ] + res[ i - 1 ][ j ] (i, j >= 1 && i != j)
解题代码:
class Solution {
public List<List<Integer>> generate(int numRows) {
List<Integer>line;
List<List<Integer>>res = new ArrayList<>();
if(numRows == 0)return res;
line = new ArrayList<>();
line.add(1);
res.add(line);
if(numRows == 1)return res;
line = new ArrayList<>();
line.add(1);
line.add(1);
res.add(line);
if(numRows == 2)return res;
for(int i = 2;i < numRows; i++) {
line = new ArrayList<>();
line.add(1);
for(int j = 1; j < i; j++) {
line.add(res.get(i-1).get(j-1)+res.get(i-1).get(j));
}
line.add(1);
res.add(line);
}
return res;
}
public static void helper(List<List<Integer>>res, int level) {
if(level < 0) return;
helper(res, level - 1);
List<Integer> ls = new ArrayList<>(level + 1);
for(int i = 0; i<=level; i++) {
if(i == 0 || i == level) {
ls.add(1);
continue;
}
ls.add(res.get(level-1).get(i-1)+res.get(level-1).get(i));
}
res.add(ls);
}
}
提交结果:
个人总结:
是我对 List 有了更加深入的了解,我之前对 List 的使用并不多,大多数用的是 ArrayList。