二刷LeetCode70 爬樓梯(四種解法)

2021-10-09 05:11:06 字數 1552 閱讀 5254

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

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

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

n=1:一級台階,只有1種方法

n=2:兩級台階,可以一級一級爬,也可以一次爬兩級,2種方法

n=3:一級一級、第一次爬兩級,後一級、第一次一級,後兩級,共三種方法

以此類推可以得到公式:fn=fn-1+fn-2

(我們可以倒著從頂往下看:第n級台階,可以是從第n-1級開始爬一級或者從第n-2級爬2級)

會重複計算:

// 遞迴

public

intclimbstairs

(int n)

return

climbstairs

(n -1)

+climbstairs

(n -2)

;}

(兩種形式的**)

// 記憶化遞迴1

public

intclimbstairs2

(int n)

public

intmemory

(int n,

int[

] memo)

if(n <=2)

else

return memo[n]

;}

// 記憶化遞迴2

int[

] dp;

public

intclimbstairs3

(int n)

public

intdfs

(int n,

int level)

if(dp[level]!=0

)else

return dp[level]

;}

// 動態規劃

public

intclimbstairs4

(int n)

int[

] dp =

newint

[n];

dp[1]

=1; dp[2]

=2;for

(int i =

3; i <= n; i++

)return dp[n]

;}

// fibonacci

public

intclimbstairs5

(int n)

int a =

1, b =

2, count =3;

while

(count <= n)

return b;

}// fibonacci2

public

intclimbstairs6

(int n)

return c;

}

end.

LeetCode 70 爬樓梯 簡單

假設你正在爬樓梯。需要 n 階你才能到達樓頂。每次你可以爬 1 或 2 個台階。你有多少種不同的方法可以爬到樓頂呢?注意 給定 n 是乙個正整數。示例 1 輸入 2 輸出 2 解釋 有兩種方法可以爬到樓頂。1.1 階 1 階 2.2 階 示例 2 輸入 3 輸出 3 解釋 有三種方法可以爬到樓頂。1...

leetcode70題 爬樓梯

每次你可以爬 1 或 2 個台階。你有多少種不同的方法可以爬到樓頂呢?注意 給定 n 是乙個正整數。示例 1 輸入 2 輸出 2 解釋 有兩種方法可以爬到樓頂。1 階 1 階 2 階示例 2 輸入 3 輸出 3 解釋 有三種方法可以爬到樓頂。3.1 階 1 階 1 階 4.1 階 2 階 5.2 階...

leetcode 70 爬樓梯 go實現

package main import fmt func main 斐波那契數列 前乙個數等於前兩個數之和 可以想,走到第i級台階有幾種方法呢,2種。1.從i 1級走一步到n級 2.從i 2級走兩步到n級 那也就是說,走到第i級台階的走法有f i f i 1 f i 2 也就是用第i 1級台階的走法...