LeetCode刷題 爬樓梯(多種方法求解)

2021-10-05 01:45:30 字數 1424 閱讀 6890

乙隻青蛙一次可以跳上1級台階,也可以跳上2級台階。求該青蛙跳上乙個 n 級的台階總共有多少種跳法。

答案需要取模 1e9+7(1000000007),如計算初始結果為:1000000008,請返回 1。

示例 1:輸入:n = 2 輸出:2

示例 2:輸入:n = 7 輸出:21

class solution 

public int dfs(int n, int level) else else

} }}

更新:新增幾種解決的方法

第一種: 遞迴(但會重複計算),時間複雜度高,會超時,適用於小數範圍

public int climbstairs(int n) 

return climbstairs(n - 1) + climbstairs(n - 2) ;

}

第二種:記憶化遞迴(解決重複計算)

public int climbstairs2(int n) 

public int memory(int n, int memo)

if (n <= 2) else

return memo[n];

}

另一種版本

(跟最上面的方法差不多的步驟,此處的更簡潔明瞭)

// 記憶化遞迴2

int dp;

public int climbstairs3(int n)

public int dfs(int n, int level)

if (dp[level] != -1) else

return dp[level];

}

第三種:動態規劃 

// 動態規劃

public int climbstairs3(int n)

int dp = new int[n + 1];

dp[1] = 1;

dp[2] = 2;

for (int i = 3; i <= n; i++)

return dp[n];

}

第四種:fibonacci數列(迭代)

// fibonacci

public int climbstairs5(int n)

int a = 1, b = 2, count = 0;

while (count <= n)

return b;

}

另一種版本:

// fibonacci2

public int climbstairs6(int n)

return c;

}

還有方法,不再贅述。

leetcode刷題(58) 70 爬樓梯

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

LeetCode刷題 70 爬樓梯

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

leetcode刷題 70爬樓梯

假設你正在爬樓梯。需要 n 階你才能到達樓頂。每次你可以爬 1 或 2 個台階。你有多少種不同的方法可以爬到樓頂呢?注意 給定 n 是乙個正整數。最開始使用的是回溯的方法,但是時間效率地下沒有通過,於是想到了動態規劃的演算法。對於i樓梯,到達其的方法有從i 1跨一步和i 2跨兩步,因此到底i的方法就...