每日Leetcode—算法(12)

118.楊輝三角

輸入: 5
輸出:
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]

算法一(自己寫(xiě)的):

def generate(self, numRows: int) -> List[List[int]]:
    if numRows == 0:     #第0行為空
        return []
    if numRows == 1:
        return [[1]]        #返回第1行
    a = [[1],[1,1]]       #前兩行
    for i in range(3,numRows+1):        #從第三行開(kāi)始進(jìn)行循環(huán)
        b = [1]              #每一行頭一個(gè)數(shù)均為1
        for j in range(2,i):           #需要加入i-2個(gè)數(shù)字  
            b.append(a[i-2][j-2]+a[i-2][j-1])    #第i行的第一個(gè)數(shù)為上一行前兩個(gè)數(shù)相加
        b.append(1)       #最后一個(gè)數(shù)仍為1
        a.append(b)      #將第i行加入數(shù)列
    return a 

分析:該算法的語(yǔ)句較多舱权,不夠簡(jiǎn)潔美觀矗晃。

算法二

def generate(self, numRows: int) -> List[List[int]]:
    l = [[1]]
    for i in range(1,numRows):           #循環(huán)numRows-1次
        l.append(list(map(lambda x,y:x+y, [0]+r[-1], r[-1]+[0])))
    return l[:numRows]       #如果numRows為0,則返回[]

分析:該算法利用了楊輝三角下一行等于上一行錯(cuò)格相加的特性宴倍。
高手們都使用了lambda张症、map等函數(shù)進(jìn)行編寫(xiě),寫(xiě)出來(lái)的算法簡(jiǎn)潔美觀鸵贬。下面進(jìn)行從map等基礎(chǔ)函數(shù)開(kāi)始介紹俗他。

lambda函數(shù)

lambda是匿名函數(shù),通常是在想用一個(gè)簡(jiǎn)單的函數(shù)恭理,但是又不想def一個(gè)新函數(shù)的情況下使用拯辙,表達(dá)式為:
lambda 形參列表 : 函數(shù)返回值表達(dá)式語(yǔ)句

>>>f = lambda x,y: x+y
>>>f(1,2)
3

zip()函數(shù)

zip函數(shù)是Python的一個(gè)內(nèi)建函數(shù),可以接受一系列可迭代的對(duì)象作為參數(shù)颜价,將對(duì)象打包成一個(gè)個(gè)元組(tuple)涯保,然后返回由元組組成的列表(list)。若傳入?yún)?shù)的長(zhǎng)度不等周伦,則以最短長(zhǎng)度的對(duì)象為最終list的長(zhǎng)度夕春。

>>> b = [4,5,6]
>>> c = [7,8,9]
>>> d = [4,5]
>>>list(zip(a,b))
[(4,7), (5,8), (6,9)]
>>>list(zip(a,b,c))
[(4,7,4),(5,8,5)]

利用*號(hào)操作符,可以將list unzip(解壓)专挪,下面是將矩陣行列互換

>>> a = [[1,2,3],[4,5,6],[7,8,9]]
>>>list(map(list, zip(*a)))
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]

map()函數(shù)

map(func,seq[,seq2…])
map函數(shù)將func用于seq中的每一個(gè)元素及志,并用一個(gè)列表將結(jié)果返回片排。如果func為空,則作用等同于zip()速侈。

>>>list(map(lambda x:x%2), range(4)))
[0,1,0,1]
>>>list(map(lambda x,y:x+y), [1,2],[3,4]))
[4,6]
>>>list(map(lambda x,y: (x+y, x*y), [1,2,3],[4,5,6]))
[(5,4),(7,10),(9,18)]

reduce函數(shù)

reduce(func,seq[,init])
reduce()函數(shù)即為化簡(jiǎn)率寡,前兩個(gè)元素進(jìn)行func,結(jié)果與下一個(gè)元素再次進(jìn)行func倚搬。
reduce(func,[1,2,3]) = func(func(1,2),3)
其中init可選:如存在init冶共,則init作為第一個(gè)元素。使用reduce函數(shù)需要從functool中調(diào)用每界。

>>>from functools import reduce
>>>reduce(lambda x,y:x+y, [1,2,3,4,5])  #階乘
120
>>>reduce(lambda x,y:x+y, [1,2,3,4,5], 2)   #二倍階乘
240

filter()函數(shù)

filter()函數(shù)用于過(guò)濾序列捅僵。函數(shù)接受一個(gè)func與數(shù)列,函數(shù)一次作用于元素眨层,根據(jù)布爾返回值決定是否返回元素庙楚。True則返回,F(xiàn)alse則不返回趴樱。

>>>list(filter(lambda x:x%2 == 1, [1,2,3,4,5]))
[1,3,5]
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末馒闷,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子叁征,更是在濱河造成了極大的恐慌窜司,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件航揉,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡金刁,警方通過(guò)查閱死者的電腦和手機(jī)帅涂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)尤蛮,“玉大人媳友,你說(shuō)我怎么就攤上這事〔蹋” “怎么了醇锚?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)坯临。 經(jīng)常有香客問(wèn)我焊唬,道長(zhǎng),這世上最難降的妖魔是什么看靠? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任赶促,我火速辦了婚禮,結(jié)果婚禮上挟炬,老公的妹妹穿的比我還像新娘鸥滨。我一直安慰自己嗦哆,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布婿滓。 她就那樣靜靜地躺著老速,像睡著了一般。 火紅的嫁衣襯著肌膚如雪凸主。 梳的紋絲不亂的頭發(fā)上橘券,一...
    開(kāi)封第一講書(shū)人閱讀 49,784評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音秕铛,去河邊找鬼约郁。 笑死,一個(gè)胖子當(dāng)著我的面吹牛但两,可吹牛的內(nèi)容都是我干的鬓梅。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼谨湘,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼绽快!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起紧阔,我...
    開(kāi)封第一講書(shū)人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤坊罢,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后擅耽,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體活孩,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年乖仇,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了憾儒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡乃沙,死狀恐怖起趾,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情警儒,我是刑警寧澤训裆,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站蜀铲,受9級(jí)特大地震影響边琉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蝙茶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一艺骂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧隆夯,春花似錦钳恕、人聲如沸别伏。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)厘肮。三九已至,卻和暖如春睦番,著一層夾襖步出監(jiān)牢的瞬間类茂,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工托嚣, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留巩检,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓示启,卻偏偏與公主長(zhǎng)得像兢哭,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子夫嗓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容