给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。
示例 1:
输入: numRows = 5
输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]
示例 2:
输入: numRows = 1
输出: [[1]]
提示:
1 <= numRows <= 30
链接:https://leetcode-cn.com/problems/pascals-triangle
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
package cn.fansunion.leecode.math;
import java.util.ArrayList;
import java.util.List;
/**
* 杨辉三角 给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。
*
* 在「杨辉三角」中,每个数是它左上方和右上方的数的和。 力扣
*
* @author wen.lei@brgroup.com
*
* 2022-2-18
*/
public class PascalsTriangle {
/**
* 严格按照定义,从上至下,从左到右;先判断一行的2个边界值都直接为1,不会出现数组越界的情况
* 实践:一道简单题,改了3次,各种越界。主要是二维数组,行和列都需要从0开始,边界值判断容易搞错。
* @param numRows
* @return
*/
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> listList = new ArrayList<>();
for (int row = 0; row < numRows; row++) {
List<Integer> list1 = new ArrayList<>();
for (int colIndex = 0; colIndex <= row; colIndex++) {
if (colIndex == 0 || colIndex == row) {
list1.add(1);
} else {
// array[row][colIndex]=array[row-1][colIndex-1]+array[row-1][colIndex]
final List<Integer> prevRow = listList.get(row - 1);
Integer num = prevRow.get(colIndex-1) + prevRow.get(colIndex);
list1.add(num);
}
}
listList.add(list1);
}
return listList;
}
}
package test.leecode.math;
import java.util.List;
import org.junit.Assert;
import org.junit.Test;
import cn.fansunion.leecode.math.PascalsTriangle;
/**
* @author wen.lei@brgroup.com
*
* 2022-2-25
*/
public class PascalsTriangleTest {
@Test
public void test() {
// 输入: numRows = 5
// 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]
PascalsTriangle test = new PascalsTriangle();
List<List<Integer>> rowList = test.generate(5);
//重载函数有歧义,烦死
//1
Assert.assertEquals(1, (Object)rowList.get(0).get(0));
//2
Assert.assertEquals(1, (Object)rowList.get(1).get(0));
Assert.assertEquals(1, (Object)rowList.get(1).get(1));
//3
Assert.assertEquals(1, (Object)rowList.get(2).get(0));
Assert.assertEquals(2, (Object)rowList.get(2).get(1));
Assert.assertEquals(1, (Object)rowList.get(2).get(2));
//4
Assert.assertEquals(1, (Object)rowList.get(3).get(0));
Assert.assertEquals(3, (Object)rowList.get(3).get(1));
Assert.assertEquals(3, (Object)rowList.get(3).get(2));
Assert.assertEquals(1, (Object)rowList.get(3).get(3));
//5
Assert.assertEquals(1, (Object)rowList.get(4).get(0));
Assert.assertEquals(4, (Object)rowList.get(4).get(1));
Assert.assertEquals(6, (Object)rowList.get(4).get(2));
Assert.assertEquals(4, (Object)rowList.get(4).get(3));
Assert.assertEquals(1, (Object)rowList.get(4).get(4));
}
}