每天 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...