欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Python算法如何解決樓梯臺階問題-創(chuàng)新互聯(lián)

這篇文章主要講解了“Python算法如何解決樓梯臺階問題”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Python算法如何解決樓梯臺階問題”吧!

成都創(chuàng)新互聯(lián)客戶idc服務(wù)中心,提供成都服務(wù)器托管、成都服務(wù)器、成都主機(jī)托管、成都雙線服務(wù)器等業(yè)務(wù)的一站式服務(wù)。通過各地的服務(wù)中心,我們向成都用戶提供優(yōu)質(zhì)廉價的產(chǎn)品以及開放、透明、穩(wěn)定、高性價比的服務(wù),資深網(wǎng)絡(luò)工程師在機(jī)房提供7*24小時標(biāo)準(zhǔn)級技術(shù)保障。

有一個有N個臺階的樓梯,你一次可以爬1或2個臺階。

給定N,編寫一個函數(shù),返回爬完樓梯的方式數(shù)量。步驟的順序很重要。

例如,如果N是4,那么有5種方式:

1,1,1,1

2,1,1

1,2,1

1,1,2

2,2

如果規(guī)定的不是一次只能爬1或2步,而是可以使用正整數(shù)X集合內(nèi)的任意數(shù)字爬樓梯,那會怎么樣?例如,如果X = {1,3,5},則表示一次爬升1,3或5階樓梯。

Python算法如何解決樓梯臺階問題

解決方案

從一些測試案例開始總是好的做法。讓我們從小的案例開始,看看能否找到某種規(guī)律。

  • N = 1,1種爬樓方式:[1]

  • N = 2,2種爬樓方式:[1,1],[2]

  • N = 3,3種爬樓方式:[1,2],[1,1,1],[2,1]

  • N = 4,5種爬樓方式:[1,1,2],[2,2],[1,2,1],[1,1,1,1],[2,1,1]

你有沒有注意到什么?請看N = 3時,爬完3階樓梯的方法數(shù)量是3,基于N = 1和N = 2。存在什么關(guān)系?

爬完N = 3的兩種方法是首先達(dá)到N = 1,然后再往上爬2步,或達(dá)到N = 2再向上爬1步。所以 f(3) = f(2) + f(1)。

這對N = 4是否成立呢?是的,這也是成立的。因為我們只能在達(dá)到第三個臺階然后再爬一步,或者在到了第二個臺階之后再爬兩步這兩種方式爬完4個臺階。所以f(4) = f(3) + f(2)。

所以關(guān)系如下: f(n) = f(n – 1) + f(n – 2),且f(1) = 1和f(2) = 2。這就是斐波那契數(shù)列。

def fibonacci(n):
 if n <= 1:
 return 1
 return fibonacci(n - 1) + fibonacci(n - 2)

當(dāng)然,這很慢(O(2^N))——我們要做很多重復(fù)的計算!通過迭代計算,我們可以更快:

def fibonacci(n):
 a, b = 1, 2
 for _ in range(n - 1):
 a, b = b, a + b
 return a

現(xiàn)在,讓我們嘗試概括我們學(xué)到的東西,看看是否可以應(yīng)用到從集合X中取步數(shù)這個要求下的爬樓梯。類似的推理告訴我們,如果X = {1,3,5},那么我們的算法應(yīng)該是f(n) = f(n – 1) + f(n – 3) + f(n – 5)。如果n <0,那么我們應(yīng)該返回0,因為我們不能爬負(fù)數(shù)。

def staircase(n, X):
 if n < 0:
 return 0
 elif n == 0:
 return 1
 elif n in X:
 return 1 + sum(staircase(n - x, X) for x in X if x < n)
 else:
 return sum(staircase(n - x, X) for x in X if x < n)

這也很慢(O(|X|^N)),因為也重復(fù)計算了。我們可以使用動態(tài)編程來加快速度。

每次的輸入cache[i]將包含我們可以用集合X到達(dá)臺階i的方法的數(shù)量。然后,我們將使用與之前相同的遞歸從零開始構(gòu)建數(shù)組:

def staircase(n, X):
 cache = [0 for _ in range(n + 1)]
 cache[0] = 1
 for i in range(n + 1):
 cache[i] += sum(cache[i - x] for x in X if i - x > 0)
 cache[i] += 1 if i in X else 0
 return cache[-1]

現(xiàn)在時間復(fù)雜度為O(N * |X|),空間復(fù)雜度為O(N)。

感謝各位的閱讀,以上就是“Python算法如何解決樓梯臺階問題”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對Python算法如何解決樓梯臺階問題這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!

網(wǎng)站標(biāo)題:Python算法如何解決樓梯臺階問題-創(chuàng)新互聯(lián)
分享路徑:http://aaarwkj.com/article10/giedo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、自適應(yīng)網(wǎng)站、企業(yè)網(wǎng)站制作、靜態(tài)網(wǎng)站微信公眾號、建站公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)
国产高清白丝免费在线观看| 91成人精品永久在线观看| 欧美国产日韩一区在线观看| 欧美日韩国产激情在线观看| 亚洲成人午夜激情在线| 91精品国产综合久久香蕉麻豆| 欧美美女福利午夜视频| 日日躁夜夜躁狠狠躁欧美| 日本高清免费中文字幕| 另类亚洲欧美专区第一页| 欧美老熟妇子乱视频在线| 亚洲av免费一区二区三区 | 国产精品伦一区二区视频| 亚洲欧美一区二区中文字幕| 日本黄色av一区二区| 日本啪啪精品一区二区三区| 日韩免费视频一区二区三区免费| 免费在线成人av观看| 久久久精品免费中文视频| 91麻豆成人精品国产| 日韩一区二区精品网站| 日韩在线一区二区三区电影| 成人免费亚洲av在线| 蜜臀久久精品亚洲一区| 日韩av在线观看大全| 色婷婷久久综合中文久久| 精品久久一区麻豆香蕉| 日韩不卡免费在线视频| 国产精品无遮挡猛进猛出 | 国产精品自产拍av在线| 日韩av天堂免费网站| 日本不卡不码高清免费| 亚洲一区乱码精品中文| 91深夜在线免费观看| 背德人妻中文字幕无修| 欧美人妻精品一区二区| 日韩一级精品电影网| 成人综合影视中文字幕| 亚洲av乱码久久精品蜜桃| 精品国产一区=区三区乱码| 丝袜在线美腿视频网站|