力扣简119 杨辉三角2
List 数学公式
自己就简单的按照杨辉三角写了。然后就更改了返回值。而且还写错了!
List<Integer> row=new LinkedList<Integer>();//最开始把这句错误写在了mat后!
写错的这里,应该是对每一行都新建一个list,否则出错!
所以理所当然运行很拉哈哈哈。

package leetcode01;
import java.util.*;
public class Solution119 {
public static List<Integer> getRow(int rowIndex) {
List<List<Integer>> mat=new LinkedList<List<Integer>>();
for(int i=0;i<=rowIndex;i++) {
List<Integer> row=new LinkedList<Integer>();//最开始把这句错误写在了mat后!
for(int j=0;j<=i;j++) {
if(j==0||j==i)
row.add(1);
else
row.add(mat.get(i-1).get(j-1)+mat.get(i-1).get(j));
}
mat.add(row);
}
return mat.get(rowIndex);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(getRow(5));
}
}
题解1:优化上述代码
//题解 1 优化 自己本来没看懂,跟着走了一遍才知道是什么意思。
public static List<Integer> getRow(int rowIndex) {
List<Integer> row=new LinkedList<Integer>();
row.add(1);
for(int i=1;i<=rowIndex;i++) {
row.add(0);
for(int j=i;j>0;j--) {
row.set(j, row.get(j)+row.get(j-1));
}
}
return row;
}
题解2:
运用数学方法,数学公式。

//题解2 做乘法会导致超出int范围,所以必须得将中间运算结果保留为long,最后再转化为int

public static List<Integer> getRow(int rowIndex) { List<Integer> row=new LinkedList<Integer>(); row.add(1); for(int i=1;i<=rowIndex;i++) { row.add((int)((long)row.get(i-1)*(rowIndex-i+1)/i)); } return row; }

浙公网安备 33010602011771号