摘要:題目要求假設(shè)有級(jí)臺(tái)階為正整數(shù),每次可以爬一級(jí)臺(tái)階或兩級(jí)臺(tái)階。問(wèn)有多少種方法爬完級(jí)臺(tái)階遞歸方法最后一步可以是一級(jí)臺(tái)階,或者是兩級(jí)臺(tái)階,一共兩種情況。
題目要求:假設(shè)有n級(jí)臺(tái)階(n為正整數(shù)),每次可以爬一級(jí)臺(tái)階或兩級(jí)臺(tái)階。問(wèn)有多少種方法爬完n級(jí)臺(tái)階?
遞歸方法
最后一步可以是一級(jí)臺(tái)階,或者是兩級(jí)臺(tái)階,一共兩種情況。可通過(guò)遞歸獲得n-1級(jí)臺(tái)階和n-2級(jí)臺(tái)階的和獲得n級(jí)臺(tái)階的結(jié)果
臺(tái)階數(shù)量過(guò)高的話,性能會(huì)很差
/** * @author rale * You are climbing a stair case. It takes n steps to reach to the top. * Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top? * Note: Given n will be a positive integer. */ public class ClimbingStairs { //遞歸 public int climbStairs(int n) { if(n<=1){ return 1; } if(n%2==0){ return (int) (Math.pow(climbStairs(n/2), 2)+Math.pow(climbStairs(n/2-1), 2)); } return climbStairs(n-1)+climbStairs(n-2); } }
非遞歸情況
為了提高性能,將遞歸轉(zhuǎn)化為循環(huán)
可以將題目轉(zhuǎn)換為n級(jí)臺(tái)階中有幾步是爬了兩級(jí)臺(tái)階,幾步是爬了一級(jí)臺(tái)階
例如 3級(jí)臺(tái)階的的場(chǎng)景為 3個(gè)一步 或者 1個(gè)一步加1個(gè)兩步
則n級(jí)臺(tái)階的場(chǎng)景為:
假設(shè)n級(jí)臺(tái)階中有a個(gè)兩步,n-2*a個(gè)一步,則情況總數(shù)為C(n-a,a)
a的取值范圍為[0,n/2]
/** * @author rale * You are climbing a stair case. It takes n steps to reach to the top. * Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top? * Note: Given n will be a positive integer. */ public class ClimbingStairs { public int climbStairs(int n){ if(n<=1){ return 1; } int countTwo = 1; int total = 1; while(countTwo*2<=n){ //此處應(yīng)設(shè)為long,防止值溢出 long temp = 1; for(int i = n-countTwo, j = 1 ; j<=countTwo; i--,j++){ temp = temp*i/j; } total += temp; countTwo++; } return total; } }
想要了解更多開(kāi)發(fā)技術(shù),面試教程以及互聯(lián)網(wǎng)公司內(nèi)推,歡迎關(guān)注我的微信公眾號(hào)!將會(huì)不定期的發(fā)放福利哦~
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/66852.html
摘要:小鹿題目假設(shè)你正在爬樓梯。需要階你才能到達(dá)樓頂。你有多少種不同的方法可以爬到樓頂呢注意給定是一個(gè)正整數(shù)。算法思路二種解決思路,第一利用遞歸第二利用動(dòng)態(tài)規(guī)劃。就是因?yàn)橛辛酥貜?fù)元素的計(jì)算,導(dǎo)致了時(shí)間復(fù)雜度成指數(shù)的增長(zhǎng)。 Time:2019/4/12Title:Clibing SrairsDifficulty: EasyAuthor:小鹿 題目:Climbing Stairs You a...
摘要:遞歸法復(fù)雜度時(shí)間空間思路這題幾乎就是求解斐波那契數(shù)列。最簡(jiǎn)單的方法就是遞歸。但重復(fù)計(jì)算時(shí)間復(fù)雜度高。代碼遞推法復(fù)雜度時(shí)間空間思路實(shí)際上我們求的時(shí)候只需要和的值,所以可以減少一些空間啊。 Climbing Stairs You are climbing a stair case. It takes n steps to reach to the top. Each time you c...
摘要:實(shí)質(zhì)就是把之前出現(xiàn)過(guò)的中間結(jié)果記錄,下次再出現(xiàn)相同情況的時(shí)候,通過(guò)可以只用的時(shí)間復(fù)雜度得到。表示到達(dá)第層樓梯的不同走法。那么題目中每次可以選擇走一步,或者兩步,。從迭代公式可以知道,有兩個(gè),和。 70. Climbing Stairs You are climbing a staircase. It takes n steps to reach to the top.Each tim...
摘要:在線網(wǎng)站地址我的微信公眾號(hào)完整題目列表從年月日起,每天更新一題,順序從易到難,目前已更新個(gè)題。這是項(xiàng)目地址歡迎一起交流學(xué)習(xí)。 這篇文章記錄我練習(xí)的 LeetCode 題目,語(yǔ)言 JavaScript。 在線網(wǎng)站:https://cattle.w3fun.com GitHub 地址:https://github.com/swpuLeo/ca...我的微信公眾號(hào): showImg(htt...
摘要:同時(shí)你可以選擇從第階開(kāi)始或者第一階開(kāi)始。我們的目標(biāo)是找出你爬到最頂層所付出的最小的開(kāi)銷。最低開(kāi)銷是,從第階開(kāi)始,只花費(fèi)就可以到頂層。想法動(dòng)態(tài)規(guī)劃問(wèn)題。的長(zhǎng)度應(yīng)該為數(shù)組長(zhǎng)度加一,其中數(shù)組的最后一個(gè)元素的值就是本題的答案,最低開(kāi)銷。 題目詳情 On a staircase, the i-th step has some non-negative cost cost[i] assigned ...
閱讀 2577·2023-04-25 17:33
閱讀 654·2021-11-23 09:51
閱讀 2961·2021-07-30 15:32
閱讀 1408·2019-08-29 18:40
閱讀 1952·2019-08-28 18:19
閱讀 1473·2019-08-26 13:48
閱讀 2248·2019-08-23 16:48
閱讀 2281·2019-08-23 15:56