Leetcode 118&119 Pascal's Triangle

118 Pascal's Triangle

題目詳情

Given numRows, generate the first numRows of Pascal's triangle.
For example, given numRows = 5,Return
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]

理解

  • 首先咱們要先理解一下pascal三角形(楊輝三角),每行端點與結尾的數爲1,每一個數等於它上方兩數之和。
  • 解法的實現仍是比較簡單的。首先要對特殊狀況進行處理(numRows小於等於0的狀況)。而後循環,每一次產生一個List,i個list有i個元素,每一個list的第一個和第i個元素都是1.
  • 對於list中間的那些元素,則找出前一個list的對應位置的兩個元素加和便可獲得。

解法

public List<List<Integer>> generate(int numRows) {
        List<List<Integer>> triangle = new ArrayList<List<Integer>>();
        if (numRows <=0){
            return triangle;
        }
        for (int i=0; i<numRows; i++){
            List<Integer> row =  new ArrayList<Integer>();
            for (int j=0; j<i+1; j++){
                if (j==0 || j==i){
                    row.add(1);
                } else {
                    row.add(triangle.get(i-1).get(j-1)+triangle.get(i-1).get(j));
                }
            }
            triangle.add(row);
        }
        return triangle;
    }

119 Pascal's Triangle2

題目詳情

Given an index k, return the kth row of the Pascal's triangle.
For example, given k = 3,
Return [1,3,3,1].
Note:
Could you optimize your algorithm to use only O(k) extra space?

理解

  • 這道題和118同樣,都是基於帕斯卡三角形的。這一道題只要求返回List形式的、一行的元素便可。
  • 這道題有個額外的要求就是隻消耗O(k)的額外空間
  • 因而咱們只在方法最開始聲明一個list,之後每一行的結果都保存在這個list中,同時根據list中元素的值計算出的下一行的元素覆蓋掉計算過的元素。

解法

public List<Integer> getRow(int rowIndex) {
        List<Integer> list = new ArrayList<Integer>();
        
        if(rowIndex < 0 ){
            return list;
        }
        
        for(int i=0;i < rowIndex+1;i++){
            list.add(0,1);
            
            for(int j=1;j<list.size()-1;j++){
                list.set(j, list.get(j)+list.get(j+1));
            }
        }
        return list;
    }
相關文章
相關標籤/搜索