119. Pascal's Triangle II
一、题目
1、审题
2、分析
输出杨辉三角的第 n 行,其中行号从 0 开始。
二、解答
1、思路:
方法一、
直接在一个 List 中计算杨辉三角的每一行。
采用一个 for 循环,每次循环一次就,向 List 头部添加一个元素 1,且 从下标 1 开始,每个元素值变为 val(i) + val(i +1) 。
即为第 n 行元素值。
public List<Integer> getRow(int rowIndex) { List<Integer> resultList = new ArrayList<>(); for (int i = 0; i <= rowIndex; i++) { resultList.add(0, 1); for(int j = 1; j < resultList.size() - 1; j++) resultList.set(j, resultList.get(j) + resultList.get(j+1)); } return resultList; }
优化:
每次向 List 尾部添加元素 1(操作更快)
public List<Integer> getRow2(int rowIndex) { List<Integer> resultList = new ArrayList<>(rowIndex + 1); for (int i = 0; i <= rowIndex; i++) { resultList.add(1); for (int j = i - 1; j > 0; j--) resultList.set(j, resultList.get(j) + resultList.get(j - 1)); } return resultList; }
方法二、
采用数组进行杨辉三角的行的计算,数组的下标计算更为方便、简介,且操作数值更快,最终转为 List 即可。
public List<Integer> getRow(int rowIndex) { Integer[] arr = new Integer[rowIndex+1]; Arrays.fill(arr, 0); // 填充 0, 否则空指针异常 arr[0] = 1; for (int i = 1; i <= rowIndex; i++) { for (int j = i; j > 0; j--) arr[j] = arr[j] + arr[j-1]; } return Arrays.asList(arr); }