日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Climbing Stairs -- LeetCode

發(fā)布時(shí)間:2024/1/18 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Climbing Stairs -- LeetCode 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
原題鏈接:? http://oj.leetcode.com/problems/climbing-stairs/ ?
這道題目是求跑樓梯的可行解法數(shù)量。每一步可以爬一格或者兩個(gè)樓梯,可以發(fā)現(xiàn),遞推式是f(n)=f(n-1)+f(n-2),也就是等于前一格的可行數(shù)量加上前兩格的可行數(shù)量。熟悉的朋友可能發(fā)現(xiàn)了,這個(gè)遞歸式正是 斐波那契數(shù)列 的定義,不熟悉的朋友可以看看 Wiki - 斐波那契數(shù)列 。根據(jù)這個(gè)定義,其實(shí)很容易實(shí)現(xiàn),可以用遞歸或者遞推都是比較簡(jiǎn)單的,下面列舉一下遞推的代碼:? public int climbStairs(int n) {int f1 = 1;int f2 = 2;if(n==1)return f1;if(n==2)return f2;for(int i=3;i<=n;i++){int f3 = f1+f2;f1 = f2;f2 = f3;}return f2; }

可以很容易判斷,上面代碼的時(shí)間復(fù)雜度是O(n),面試一般都會(huì)實(shí)現(xiàn)一下,不過還沒完,面試官會(huì)接著問一下,有沒有更好的解法?還真有,斐波那契數(shù)列其實(shí)是有O(logn)的解法的。根據(jù)wiki我們知道,斐波那契數(shù)列是有通項(xiàng)公式的,如下:


所以如果我們用 Pow(x, n)中介紹的分治法來求解這個(gè)n次冪的話可以完成O(logn)的求解。還有另一種理解方法就是斐波那契數(shù)列的線性代數(shù)解法(參見 Wiki - 斐波那契數(shù)列),可以看到迭代是一個(gè)二乘二的簡(jiǎn)單矩陣,數(shù)列的第n個(gè)數(shù)就是求解這個(gè)矩陣的n-2次冪,同樣用分治法就可以完成O(logn)的求解。 這是對(duì)于斐波那契數(shù)列問題的一般面試過程,先實(shí)現(xiàn)一下通常的O(n)的解法,然后再了解一下是否知道有O(logn)的解法,一般不要求實(shí)現(xiàn),知道就行,不過其實(shí)實(shí)現(xiàn)也不是很難,有興趣的朋友可以練習(xí)一下哈。

總結(jié)

以上是生活随笔為你收集整理的Climbing Stairs -- LeetCode的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。