LeetCode-#62異なるパス(トップ100)

一緒に書く習慣をつけましょう!「ナゲッツデイリーニュープラン・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財団を中心とした技術コンテンツを共有し、優れた学習資料を整理して収集します。

今後、多くの情報が公式アカウントに翻訳されますので、興味のある方はぜひご参加ください。

おすすめ

転載: juejin.im/post/7084956779561353246
おすすめ