杨辉三角Ⅰ:
给定一个非负整数
numRows
,生成「杨辉三角」的前numRows
行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。示例1:
输入:numRows = 5
输出: [ [ 1 ],[ 1,1 ],[ 1,2,1 ],[ 1,3,3,1 ],[ 1,4,6,4,1 ] ]
示例2:
输入:numRows = 1
输出:[ [ 1 ] ]
题目链接:LeetCode-Solution
解题思路:由上图可以看出,每个数字等于上一行的左右两个数字之和,可用此性质写出整个杨辉三角。即第 n 行的第 i 个数等于第 n-1 行的第 i−1 个数和第 i 个数之和。
代码:
public class Solution {
public static List<List<Integer>> generate(int numRows){
List<List<Integer>> ret = new ArrayList<List<Integer>>();
for (int i = 0; i < numRows; ++i) {
List<Integer> row = new ArrayList<Integer>();
for (int j = 0; j <= i; ++j) {
if (j == 0 || j == i) {
row.add(1);
} else {
row.add(ret.get(i - 1).get(j - 1) + ret.get(i - 1).get(j));
}
}
ret.add(row);
}
return ret;
}
}
杨辉三角Ⅱ:
给定一个非负索引
rowIndex
,返回「杨辉三角」的第rowIndex
行。示例1:
输出:rowIndex = 3
输入: [ 1,3,3,1 ]
示例2:
输出:rowIndex = 0
输入:[ 1 ]
题目链接:LeetCode-Solution
代码:
public List<Integer> getRow(int rowIndex) {
List<List<Integer>> C = new ArrayList<List<Integer>>();
for (int i = 0; i <= rowIndex; ++i) {
List<Integer> row = new ArrayList<Integer>();
for (int j = 0; j <= i; ++j) {
if (j == 0 || j == i) {
row.add(1);
} else {
row.add(C.get(i - 1).get(j - 1) + C.get(i - 1).get(j));
}
}
C.add(row);
}
return C.get(rowIndex);
}