一緒に書く習慣をつけましょう!「ナゲッツデイリーニュープラン・4月アップデートチャレンジ」に参加して7日目です。クリックしてイベントの詳細をご覧ください。
序文
この質問は、LeetCodeの上位100の高頻度質問です。
私たちのコミュニティは、Gu Yi(Netflix Growth Hacker、「The Way of the iOS Interview」の著者、ACE Professional Fitness Coach。)のSwiftアルゴリズム問題ソリューションを、誰もが学び、読むことができるテキストバージョンに順次整理します。
これまでに62の問題についてLeetCodeアルゴリズムを更新し、更新の時間と進行状況を維持します(月曜日、水曜日、金曜日の午前9時にリリースされます)。大幅な改善があります。
小さな一歩を積み上げないと、千マイルも行けません。小さな小川を積み上げなければ、川を作ることはできません。Swiftコミュニティは、前進するためにあなたを伴います。提案やコメントがあれば、記事の最後にメッセージを残してください。私たちはあなたのニーズを満たすために最善を尽くします。
難易度:中
1.説明
ロボットはm x n
グリッド(開始点は下の画像で「開始」とマークされています)。
ロボットは、一度に1ステップだけ下または右に移動できます。ロボットはグリッドの右下隅に到達しようとします(下の画像で「完了」とラベル付けされています)。
Qパスは全部でいくつありますか?
2.例
例1
输入:m = 3, n = 7
输出:28
复制代码
例2
输入:m = 3, n = 2
输出:3
解释:
从左上角开始,总共有 3 条路径可以到达右下角。
1. 向右 -> 向下 -> 向下
2. 向下 -> 向下 -> 向右
3. 向下 -> 向右 -> 向下
复制代码
例3
输入:m = 7, n = 3
输出:28
复制代码
例4
输入:m = 3, n = 3
输出:6
复制代码
制限:
1 <= m, n <= 100
- 質問データは、回答が以下であることを保証します
2 * 10^9
3.回答
class UniquePaths {
func uniquePaths(m: Int, _ n: Int) -> Int {
var pathNums = Array(count: m, repeatedValue: Array(count: n, repeatedValue: 0))
return _helper(&pathNums, m - 1, n - 1)
}
private func _helper(inout pathNums: [[Int]], _ m: Int, _ n: Int) -> Int {
if m < 0 || n < 0 {
return 0
}
if m == 0 || n == 0 {
return 1
}
if pathNums[m][n] != 0 {
return pathNums[m][n]
}
pathNums[m][n] = _helper(&pathNums, m - 1, n) + _helper(&pathNums, m, n - 1)
return pathNums[m][n]
}
}
复制代码
- 主なアイデア:2D動的計画法。2D配列をキャッシュとして使用して計算データを格納します。
- 時間計算量:O(mn)
- スペースの複雑さ:O(mn)
アルゴリズムソリューションのリポジトリ:LeetCode-Swift
クリックしてLeetCodeの練習に進みます
私たちに関しては
私たちはSwift愛好家によって共同で維持されており、Swift戦闘、SwiftUI、Swift財団を中心とした技術コンテンツを共有し、優れた学習資料を整理して収集します。
今後、多くの情報が公式アカウントに翻訳されますので、興味のある方はぜひご参加ください。