Leetcode-119 杨辉三角II

题目描述:

给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。

Leetcode-119  杨辉三角II

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

示例:

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

解法一:从后往前   末尾添0是关键

空间复杂度是O(k)

class Solution {
    public List<Integer> getRow(int rowIndex) {
        List<Integer> list=new ArrayList<Integer>();
        if(rowIndex<0)
            return list;
        for(int i=0;i<=rowIndex;i++)
        {
            if(i==0)
                list.add(1);
            else
                list.add(0);//是关键
            for(int j=i;j>0;j--)
            {
                list.set(j,list.get(j-1)+list.get(j));
            }
        }
        return list;
    }
}

解法二:

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

使用滚动数组进一步优化空间复杂度

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

 

没有想到

List<List<Integer>> result=new ArrayList<List<Integer>>();

List<Integer> list=new ArrayList<Integer>();

光只考虑了List<Integer> list=new ArrayList<Integer>();

 

上一篇:本月学习小结(01/05 - 31/05)


下一篇:LeetCode 每日一题119. 杨辉三角 II