LeetCode118. Pascal's Triangle 楊輝三角

題目

給定行數,生成對應的楊輝三角java

思考

  1. 同一行是對稱的,最大的下標爲(行數+1)/2;1,1,2,3,6;下標從0開始,則對應分別爲0.0.1.1.2.2
  2. 對於第偶數行,個數也是偶數,對於奇數行,個數也是奇數
  3. 並且對於非第一列的數,d[i][j]=d[i-1][j-1]+d[i-1][j]

後面經過編程實現,發現本身第一個條件是徹底沒有用的,能夠不須要用到對稱性,直接由上一行計算下一行(即第三條)。
並且忘記說最後一列了。編程

因此新的思考點是:函數

  1. 對於非第一列/最後一列的數,d[i][j]=d[i-1][j-1]+d[i-1][j]
  2. 第一列和最後一列初始化爲1便可

出現過的錯誤

粗心

因爲粗心把當前行數i用總行數numRows代替,因此出現了下標出界的狀況Line 18: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0優化

沒想清楚

還有沒想清楚關於對稱點和i、j的關係,因此老是出界。最後考慮取消這個點,從整體狀況考慮。code

局部變量帶來的問題

lineInts聲明在函數域中,結果放入總的嵌套List中出了問題。而後在for的局部域中聲明這個變量,問題就解決了。get

代碼

public List<List<Integer>> generate(int numRows) {
        List<List<Integer>> results=new ArrayList<List<Integer>>(numRows);
        
        for(int i=0;i<numRows;i++){//i表明當前行數-1
            ArrayList<Integer> lineInts=new ArrayList<Integer>();//這一行的數字
            lineInts.add(1);//每行第一個是1
            int j=1;
            for(;j<i;j++){
                int sum=results.get(i-1).get(j-1)+results.get(i-1).get(j);
                lineInts.add(sum);
            }
            if(i>0)
                lineInts.add(1);//最後加一個1
            
            results.add(lineInts);
        }
        return results;
    }

總結

成績是32%,應該還有優化的地方,回頭再考慮一下吧。io

相關文章
相關標籤/搜索