119 楊輝三角 II

2021-09-29 11:31:56 字數 1220 閱讀 2857

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

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

示例:

輸入:

3輸出:[1

,3,3,1]

高階:你可以優化你的演算法到 o(k) 空間複雜度嗎?

前面2行直接生成,第三行(nowindex = 2)在上乙個結果,即[1,1]的倒數第二個位置插入2即可。

第乙個和最後乙個元素保持不變,都是1。

第二個元素到倒數第三個元素,採用遞推公式:當前位置的新值 = 上一次結果前乙個位置的值+上一次結果當前位置的值,寫成公式,就是res.get(j) = res.get(j - 1) + res.get(j);。但是直接在程式上這樣寫是不行的,因為我是直接在原來的結果上進行修改。這樣做,第一次沒問題,第二次及以後,需要利用上一輪計算結果位置原來的值,由於上次的的結果res.get(j)已經被修改了,因此計算結果就會出錯。因此,需要設定2個變數second 和 first來分別提前儲存當前位置(j)和上乙個位置的值(j-1),這樣就沒問題了。

倒數第2個元素採用插入法,需要用到first變數。

class

solution

for(

; j < i -

1; j++

)// ***** 當 i = 2 時,上面2個**塊不執行,只執行下面這個語句

res.

add(j, first + res.

get(j));

// 在最後乙個數字 1 前面插入對應的數字

}return res;

}}

class

solution

for(

int k = n/2+

1; k <= n; k++

)return ans;

}}

更多思路可參考:windliang

如有不當之處,歡迎讀者批評指正!

119 楊輝三角 II

略。注意是用o k 的空間完成,而不要求時間複雜度 時間複雜度沒法再小了應該只能是o n 2 11 1121 1331 這個二維 從左往右表示實際題需的row陣列 從上往下表示依據時間進展,不同時刻row陣列的樣子。每次形成row陣列時,應該從最右邊的1開始生成,向左,終止於最左邊的1。而不是相反的...

119 楊輝三角 II

給定乙個非負索引 k,其中 k 33,返回楊輝三角的第 k 行。在楊輝三角中,每個數是它左上方和右上方的數的和。示例 輸入 3 輸出 1,3,3,1 解法1 第n行第k列的值,可以通過通項公式 n 1 k 1 n k 計算得到 對其進行化簡 n 1 n 2 n k k 1 直接求階乘注意是否超出型別...

119 楊輝三角 II

給定乙個非負索引 k,其中 k 33,返回楊輝三角的第 k 行。在楊輝三角中,每個數是它左上方和右上方的數的和。示例 輸入 3 輸出 1,3,3,1 分析 題目中要求用o k 的空間,要把原來二維的vector壓縮到一維,通過觀察規律可以發現,第n行就有n個元素,且行首行尾均為1,中間的n 2項進行...