力扣简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;
    }

 

posted @ 2022-05-22 16:38  Ssshiny  阅读(23)  评论(0)    收藏  举报