每日一道 LeetCode 17 爬樓梯

2022-03-17 18:26:29 字數 1746 閱讀 2933

每天 3 分鐘,走上演算法的逆襲之路。

每日一道 leetcode 前文合集

github:

gitee:

假設你正在爬樓梯。需要 n 階你才能到達樓頂。

每次你可以爬 1 或 2 個台階。你有多少種不同的方法可以爬到樓頂呢?

注意:給定 n 是乙個正整數。

示例 1:

輸入: 2

輸出: 2

解釋: 有兩種方法可以爬到樓頂。

1. 1 階 + 1 階

2. 2 階

示例 2:

輸入: 3

輸出: 3

解釋: 有三種方法可以爬到樓頂。

1. 1 階 + 1 階 + 1 階

2. 1 階 + 2 階

3. 2 階 + 1 階

過程啥過程,這道題完全沒有頭緒好麼。

好不容下班後爬了個 7 層樓回家,結果開啟電腦接著讓我爬樓梯,爬個錘子哦。

最近的題是怎麼了,明明說好了是簡單難度,結果還是一眼看下去連想法都沒,讓我回歸下前兩天的那些題它不好麼。這道題我有一種強烈的預感是一道數學題,和程式關係不是很大。

麼得辦法,不會做就只能開啟答案開始看答案了。

說是動態規劃,實際上是對題做了乙個簡單的推演:

輸入    輸出

1 1

2 2

3 3

4 5

5 8

...

看著是不是感覺很符合這個公式:

\[f(x) = f(x - 1) + f(x - 2)

\]這個公式其實很好理解,因為最後一次要麼上 1 個台階,要麼是上 2 個台階,上乙個台階前面的種數有 f(x - 1) 種,上 2 個台階前面有 f(x - 2) 中方式,所以 f(x) 就是這兩個加起來咯。

對著這個公式寫**其實很簡單:

public int climbstairs(int n) 

return r;

}

我們把這個題結果的數列列出來看一下:

1, 2, 3, 5, 8, 13, 21 ...
如果上大學的時候沒有偷懶的話,這個數列應該很有名,它是斐波那契數列,又叫**分割數列。

有關斐波那契是由乙個通項公式的:

\[f(n) = \frac} [(\frac}) ^ n - (\frac}) ^ n]

\]有了這個通項公式,寫**應該沒啥問題了,照著寫就好了。

其實答案中還有乙個方案是叫 「矩陣快速冪」 ,這個思想我了解清楚了,但是答案中給的題解沒咋看懂。

原諒我把大學的線性代數都不知道扔**去了,今天晚上基本上研究了半個晚上矩陣也沒大懂,主要是年紀大了,以前學的東西都忘得差不多了。

Leetcode 每日一道

如果不出意外每天會寫一道演算法題的部落格。如果題目簡單,就一天發布一道。如果題目比較難。我會2 3天發一道演算法的題目。今天寫的這道題目比較簡單。題目如下 解法我是用c 寫的。我的解法的大致想法是 先把需要轉換的矩陣直接轉換成一維的陣列,然後再根據要求把一維中的元素全部截為以c個元素為一組的vect...

每日一道leetcode 最大括號深度

有效括號字串 定義 對於每個左括號,都能找到與之對應的右括號,反之亦然。詳情參見題末 有效括號字串 部分。巢狀深度 depth 定義 即有效括號字串巢狀的層數,depth a 表示有效括號字串 a 的巢狀深度。詳情參見題末 巢狀深度 部分。有效括號字串型別與對應的巢狀深度計算方法如下圖所示 給你乙個...

每日一道 LeetCode 11 外觀數列

每天 3 分鐘,走上演算法的逆襲之路。每日一道 leetcode 前文合集 github gitee 給定乙個正整數 n 1 n 30 輸出外觀數列的第 n 項。注意 整數序列中的每一項將表示為乙個字串。外觀數列 是乙個整數序列,從數字 1 開始,序列中的每一項都是對前一項的描述。前五項如下 1.1...