[leetCode]119.杨辉三角 II

在这里插入图片描述

动态规化

使用一个列表保存杨辉三角每一行的值,初始化第0行为[1],后面的几行都可以由前一行计算得到,最后返回最后一行。

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

由于每次只用到前一行这个状态所以可以只使用一个变量preRow保存前一行状态,这样优化了空间复杂度。

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

下面是递归的写法,简单易懂

class Solution {
    public List<Integer> getRow(int rowIndex) {
        List<Integer> row = new ArrayList<>();
        if(rowIndex == 0){
            row.add(1);
            return row;
        }else{
            List<Integer> preRow = getRow(rowIndex - 1);
            row.add(1);
            for(int i = 1; i < rowIndex; i++){
                row.add(preRow.get(i)+preRow.get(i-1));
            }
            row.add(1);
        }
        return row;
    }
}
posted @ 2020-07-12 08:50  消灭猕猴桃  阅读(59)  评论(0编辑  收藏  举报