Leetcode-119 楊輝三角II
阿新 • • 發佈:2021-02-14
題目描述:
給定一個非負索引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>();