給定乙個非負索引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項進行...