leecode学习记录9——119.杨辉三角II

leecode学习记录九

杨辉三角II

难度:简单

给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
Alt

在杨辉三角中,每个数是它左上方和右上方的数的和。

示例:

输入: 3
输出: [1,3,3,1]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/pascals-triangle
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路

1.这题就是上一题的改编,在会求杨辉三角的情况下做这道题只需在计算到第rowIndex行时,将数存入list
2.将上一行求的数保存在pre中,计算当前一行cur
3.杨辉三角公式

代码

//方法一 根据上题的微改动,不过空间复杂度较高
class Solution {
    public List<Integer> getRow(int rowIndex) {
        //n维数组
        int[][] arr = new int[rowIndex+1][rowIndex+1];
	    //表示每一行的值
	    List<Integer> list = new ArrayList<Integer>();
        list.add(1);
        for (int i = 0; i < rowIndex+1; i++) {
	        //为每一层的第一个值赋1
	        arr[i][0] = 1;
            //对i行的元素进行赋值,j从1开始,j等于0的情况已经在上面赋过值了
            for (int j = 1; j <= i; j++) {
                arr[i][j] = arr[i-1][j-1] +arr[i-1][j];
                //判断是否计算到第rowIndex行
                if( i == rowIndex)
                    list.add(arr[i][j]);
		    }
	    }
        return list;
    }
}

//方法二 和上面的思路类似但是只用列表pre存储了上一行的数据
public List<Integer> getRow(int rowIndex) {
    List<Integer> pre = new ArrayList<>();
    List<Integer> cur;
    for (int i = 0; i <= rowIndex; i++) {
        cur = new ArrayList<>();
        for (int j = 0; j <= i; j++) {
            if (j == 0 || j == i) {
                cur.add(1);
            } else {
                cur.add(pre.get(j - 1) + pre.get(j));
            } 
        }
        pre = cur;
    }
    return cur;
}

总结

公式法这个讲得很详细:https://leetcode-cn.com/problems/pascals-triangle-ii/solution/xiang-xi-tong-su-de-si-lu-fen-xi-duo-jie-fa-by–28/

发布了11 篇原创文章 · 获赞 0 · 访问量 56

猜你喜欢

转载自blog.csdn.net/yqzsszl/article/details/103836503