三分鐘搞懂一道演算法題 楊輝三角的擴充套件問題

2021-09-22 01:37:35 字數 1589 閱讀 2362

每個數字等於上一行的左右兩個數字之和,即c(n+1,i) = c(n,i) + c(n,i-1)每行數字左右對稱,由 1 開始逐漸變大

第 n 行的數字有 n 項

第 n 行的第 m 個數和第 n - m + 1 個數相等 ,為組合數性質之一

( a + b )^n的展開式中的各項係數依次對應楊輝三角的第 ( n + 1 ) 行中的每一項

。。。

**展示:

#include main()

,l,r;

while(n<1 || n>16) //這一段,說實話,我一直沒想明白為啥,但必須有[無奈]

for(i=1;i<=n;i++)

printf("\n");

}}

這種解法非常簡便(對計算機來說),只使用了乙個一維陣列和兩個臨時變數。

1.題目**於 leetcode 上第 118 號問題:楊輝三角。題目難度為 easy,目前通過率為 61.8% 。

題目描述

給定乙個非負整數 numrows,生成楊輝三角的前 numrows 行。

輸入: 5

輸出:[

[1],

[1,1],

[1,2,1],

[1,3,3,1],

[1,4,6,4,1]

]題目解析:

這道題目在各大高校的習題中經常出現。

對於本題而言,利用性質 1 :每一行的首個和結尾乙個數字都是 1,從第三行開始,中間的每個數字都是上一行的左右兩個數字之和。

**展示:

class solution 

result.add(list);

}return result;

}}

2.題目**於 leetcode 上第 119 號問題:楊輝三角ii。題目難度為 easy,目前通過率為 55.5% 。

題目描述

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

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

(要知道,o(n)複雜度最直觀的方式是只有一層n迴圈)

這道題目的難點與思考點在於題目有額外限制條件,程式只能使用 o(k) 的額外空間,因此無法通過累加的方式將每一行都輸出列印。

這裡依舊使用楊輝三角的規律,很隱藏的規律:對於楊輝三角的同一行,第 ( i + 1) 項是第 i 項的( k - i ) /( i + 1 ) 倍

比如:第 k 索引行的第 0 項:1

第 k 索引行的第 1 項:1 * k

第 k 索引行的第 2 項:1 * k * ( k - 1) / 2

第 k 索引行的第 3 項:[1 * k * ( k - 1) / 2 ] * ( k - 2 ) / 3

**實現:

class solution 

return res;

}}

好了,至此,本篇就結束了。。。

三分鐘搞懂CSS定位

css定位是css中比較基礎的一部分,前端必須要掌握。本文重點是position的屬性和sticky。css定位即允許元素可以出現在相對正常位置外的其它位置,實現對元素位置控制的效果。css定位基本分為三種定位 普通文件流 浮動和絕對定位。普通文件流即按照html的定義順序完成排布,塊級元素就從上往...

三分鐘帶您搞懂建造者模式

建造者模式 builder 將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。建造者模式有兩重含義 1 將乙個物件的使用和建立過程分離,這樣使用者在使用這個物件的時候,就不需要關心該物件的具體建立過程和細節。2 將物件建立的步驟抽象出來,再建立其他建立步驟相同的物件時,只需要...

三分鐘建立乙個小程式 每天三分鐘玩轉小程式 1

點選上方 程式設計三分鐘 馬上關注,每週1 3 5定時更新。好險,還有幾分鐘,差點沒有趕上周五的尾巴。這次帶來的是1.小程式開發前的準備,非常的簡單,讓我們花三分鐘建立乙個小程式!滑鼠放到小程式上 拉到最下面,出現前往註冊 這個時候你會收到一封郵件 gmail注意上網方式 點選郵件中的鏈結,郵箱啟用...