1. 程式人生 > 其它 >Leetcode-119 楊輝三角II

Leetcode-119 楊輝三角II

技術標籤:Leetcodeleetcode

題目描述:

給定一個非負索引k,其中 k≤33,返回楊輝三角的第 k 行。

在楊輝三角中,每個數是它左上方和右上方的數的和。

示例:

輸入: 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=newArrayList<List<Integer>>();

List<Integer>list=newArrayList<Integer>();

光只考慮了List<Integer>list=newArrayList<Integer>();