LeetCode 119. Pascal's Triangle II

題目

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?

翻譯

給一個指標k,回傳第k階的Pascal's三角形。

範例:
k=3,回傳[1,3,3,1]。

注意:你能改善演算法只用O(k)的額外空間嗎?

思路

不考慮只使用O(k)額外空間的情況下,只要參考LeetCode 118. Pascal's Triangle這題,就很簡單。

但上面的很像會超出時間,還是要用同一個陣列不斷改變裡面值的方式來做才行。毎一階的Pascal's三角形都可以重上一階算出,

計算方法,毎一階開頭一定是1,接下來位子n的數子為上一階陣列pAry[n-1] + pAry[n]

* ex. k = 4
* 第一階  array =    [1]
* 第二階  array =   [1,1]
* 第三階  array =  [1,2,1]
* 第四階  array = [1,3,3,1]

解題

/**
 * @param {number} x
 * @return {boolean}
 */
var isPalindrome = function(x) {
/**
 * @param {number} rowIndex
 * @return {number[]}
 */
var getRow = function(rowIndex) {
    if(rowIndex == 0) return [1];
    if(rowIndex == 1) return [1,1];

    var ary = [1];

    for(var i = 1 ; i <= rowIndex ; i++){
        // 儲存 ary[n-1]的數字
        var prev = ary[i-1];
        for(var j = 1 ; j < i ; j++ ){
            // preVrow[n]的數字,如果preVrow沒有n,設為0
            var cur = ary[j] ? ary[j] : 0;

            // 目前row[n]的值為 "上一個prevRow[n-1] + prevRow[n]"
            ary[j] = prev + cur;

            prev = cur;
        }
        ary.push(1);
    }
    return ary;
};

results matching ""

    No results matching ""