2021年2月12日 Leetcode每日一题:119. 杨辉三角 II

杨辉三角Ⅱ

1.题目描述

给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。
2021年2月12日 Leetcode每日一题:119. 杨辉三角 II_第1张图片
在杨辉三角中,每个数是它左上方和右上方的数的和。

2.示例

示例:

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

3.读题

今天又是很简单的每日一题。
这个题目本身不难,难点在于题目给出了附加挑战:你可以优化你的算法到 O(k) 空间复杂度吗?
也就是说,不能使用额外空间,最多只能使用目标层长度的空间。
但是,如果将杨辉三角左对齐,就能够发现两个规律:

1.每层的第一个数都是1
2.每层除了第一个数,其他数字就等于上一层该位置的数加上上一层该位置的左边一个位置的数。

也就是说,每个位置的值与他在上一层对应位置之后位置的值无关。
所以,如果从后往前生成杨辉三角,同时将新一层生成的数字放在上一层对应的位置上,那么该位置的数字也不会影响前一个位置数字的更新。

4.代码

class Solution {
    public List<Integer> getRow(int rowIndex) {
        int[] yh = new int[rowIndex+1];
        yh[0]=1;
        if(rowIndex!=0){
            yh[1]=1;
        }
        if(rowIndex>=2){
            for(int i=2;i<rowIndex+1;i++){
                for(int j=i-1;j>0;j--){
                    yh[j] = yh[j]+yh[j-1];
                }
                yh[i] = 1;
            }
        }
        List<Integer> l = new ArrayList<>();
        for(int i=0;i<rowIndex+1;i++){
            l.add(yh[i]);
        }
        return l;
    }
}

你可能感兴趣的:(leetcode每日一题,java,leetcode,算法)