leetcode刷题记录--杨辉三角(滚动数组)

119.杨辉三角2

  • 题目描述
  • 解法一:先求出杨辉三角再返回特定的行
  • 解法二:使用滚动数组
    • 思路
    • 代码实现

题目描述

给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行。

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

示例一:

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

示例二:

输入: rowIndex = 0
输出: [1]

示例三:

输入: rowIndex = 1
输出: [1,1]

解法一:先求出杨辉三角再返回特定的行

杨辉三角相信大家应该不陌生
杨辉三角的性质:
1.每行数字左右对称,由 11 开始逐渐变大再变小,并最终回到 1。
2.第 n行(从0开始编号)的数字有 n+1项。
3.每个数字等于上一行的左右两个数字之和,左右两边为1
下面看代码

class Solution {
    public List<Integer> getRow(int rowIndex) {
        List<List<Integer>> C = new ArrayList<List<Integer>>();
        for (int i = 0; i <= rowIndex; ++i) {
            List<Integer> row = new ArrayList<Integer>();
            for (int j = 0; j <= i; ++j) {
                if (j == 0 || j == i) {
                    row.add(1);
                } else {
                    row.add(C.get(i - 1).get(j - 1) + C.get(i - 1).get(j));
                }
            }
            C.add(row);
        }
        return C.get(rowIndex);
    }
}

解法二:使用滚动数组

思路

当前行第 ii项的计算只与上一行第 i-1 项及第 i项有关。因此我们可以倒着计算当前行,这样计算到第 i项时,第 i-1 和第i项仍然是上一行的值。

leetcode刷题记录--杨辉三角(滚动数组)_第1张图片

代码实现

class Solution {
    public List<Integer> getRow(int rowIndex) {
        List<Integer> row = new ArrayList<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;
    }
}

你可能感兴趣的:(力扣刷题打卡,leetcode,算法,职场和发展)