python楊輝三角_LeetCode刷題——第二十八天(楊輝三角)
昨晚上的大暴雨真是很刺激呀!狂風暴雨,電閃雷鳴,因為是半夜起來關窗戶的時候看到的,所以腦子裡也沒有留下很多畫面,只記得關完窗戶後,躺在床上,感覺外邊的世界要崩塌了一樣。想想有多少流浪的人在這樣的天氣,只能蜷縮在城市的某個角落裡等待天晴,就略有心酸,可能是我最近看抖音上那些關愛孤寡老人的視訊看多了,就總往這方面想——楊輝三角
第二十八天——第二十八題(楊輝三角)
看題目!
給定一個非負整數 numRows,生成楊輝三角的前 numRows 行。
在楊輝三角中,每個數是它左上方和右上方的數的和
示例:
輸入: 5 輸出: [ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1] ]
python 解答之一:
class Solution(object): def generate(self, numRows): """ :type numRows: int :rtype: List[List[int]] """ triangle = [] for row_num in range(numRows): row = [None for i in range(row_num+1)] row[0], row[-1] = 1, 1 for j in range(1, len(row)-1): row[j] = triangle[row_num-1][j-1] + triangle[row_num-1][j] triangle.append(row) return triangle
程式碼解釋:
1.通過觀察楊輝三角的數字規律可以確定一些位置的值,每一行的首位和末尾都是1。
2.首先定義一個目標陣列(最後返回的結果),之前也做過一個將臨時陣列新增到目標陣列的題目(可以看一下第二十三天的內容)。
3.開始迴圈,在迴圈中定義了一個數組row,這個row在第一次for迴圈時,row=[None],然後row[0]=1改變了row=[None],進入第二個for迴圈,這個j代表的索引就是row陣列中非1的那些位置(除首末以外的中間位置)。
4.這個時候找到當前行的前一行陣列再找到該陣列j索引的前一個索引上的值(也就是每個數的左上方的值),同理找到這個元素右上方的值,兩個值之和賦值給row的j索引,主要操作就完成了。
5.row放入triangle中,進行下一次迴圈操作,迴圈完畢後,返回triangle陣列,就可以得到楊輝三角啦。
6.對於這句的理解:row = [None for i in range(row_num+1)],就是直接把row上所有的位置都變成None,然後在下一句:row[0], row[-1] = 1, 1將首末位變成已知的值1。之後在下邊的操作計算中間的值。
小生不才,自帶囉嗦體質,望各位見諒~
讀完一遍發現我解釋了那麼多,好像第6步解釋就可以說明問題了哈哈~