杨辉三角
题目:
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
在杨辉三角中,每个数是它左上方和右上方的数的和。
示例:
输入: 5
输出:
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/pascals-triangle
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
分析:
这道题目的规则实际上已经在题干中给出了,在杨辉三角中第一行和第二行是固定的,从第三行开始中间部分需要计算,但是首位数和末位数固定为1。
第三行需要计算一次,第四行需要计算两次... ...
由于前两行不需要计算,所以如果要求计算3行,那么实际上外层循环只需要执行一次,内层循环也只需要执行一次。如果要求计算4行,那么实际上外层循环只需要执行二次,第一次外层循环的内层循环执行一次,第二次外层循环的内层循环执行两次。
代码:
class Solution { public List<List<Integer>> generate(int numRows) { if (numRows == 0) { return new ArrayList<>(); } List<List<Integer>> lists = new ArrayList<>(); if (numRows >= 1) { List<Integer> oneRows = new ArrayList<>(); oneRows.add(1); lists.add(oneRows); } if (numRows >= 2) { List<Integer> twoRows = new ArrayList<>(); twoRows.add(1); twoRows.add(1); lists.add(twoRows); } if (numRows < 3) { return lists; } for (int i = 0; i < numRows - 2; i++) { List<Integer> anyRows = new ArrayList<>(); anyRows.add(1); for (int j = 0; j < i + 1; j++) { List<Integer> preRows = lists.get(i + 1); anyRows.add(preRows.get(j) + preRows.get(j + 1)); } anyRows.add(1); lists.add(anyRows); } return lists; } }