[] 62.ユニークなパスLeetCode異なるパス(中)(JAVA)

[] 62.ユニークなパスLeetCode異なるパス(中)(JAVA)

トピック住所:https://leetcode.com/problems/unique-paths/

件名の説明:

ロボットは、(下図の「スタート」マーク)amxnグリッドの左上隅に位置しています。

ロボットは、任意の時点でダウンまたは右に移動することができます。ロボットは、(下図の「完了」マーク)グリッドの右下隅に到達しようとしています。

どのように多くの可能なユニークなパスがありますか?


上記は、7×3のグリッドです。どのように多くの可能なユニークなパスがありますか?

例1:

Input: m = 3, n = 2
Output: 3
Explanation:
From the top-left corner, there are a total of 3 ways to reach the bottom-right corner:
1. Right -> Right -> Down
2. Right -> Down -> Right
3. Down -> Right -> Right

例2:

Input: m = 7, n = 3
Output: 28

制約:

1 <= m, n <= 100
It's guaranteed that the answer will be less than or equal to 2 * 10 ^ 9.

効果の対象に

左コーナーMXNグリッドに位置ロボットは(以下、「スタート」と表示されたポイントのフィギュアを開始します)。

ロボットは右または下に一歩を移動することができます。(「完了」と表示され、次の図の)グリッドの右下隅に到達しようとしているロボット。

合計でQ.どのように多くの異なるパスがありますか?

問題解決のアプローチ

この問題は、数学のスキルを持つ実際にあります。
Mを移動するための1、m×nのグリッド、左ニーズ- 1つのステップ、右Nを移動する必要が- M +の合計ダウン1つのステップN - 2ステップ
2、長いNを見つけるために行くために右のように- 1、M + Nステップで- 2段階のどのように多くの場合することができます: C メートル + n個 - 2 n個 - 1 C ^ {N - 1} _ {M + N - 2}

class Solution {
    public int uniquePaths(int m, int n) {
        int min = m > n ? n : m;
        long res = 1;
        for (int i = 1; i <= min - 1; i++) {
            res = res * (m + n - 1 - i) / i;
        }
        return (int) res;
    }
}

実行時:0ミリ秒は、のJavaに提出するすべてのユーザーの100.00パーセントを破った
メモリ消費量:36.2メガバイト、Javaで提出するすべてのユーザの5.01パーセントを打ちます

公開された81元の記事 ウォンの賞賛6 ビュー2275

おすすめ

転載: blog.csdn.net/qq_16927853/article/details/104891761