LeetCode.62--異なるパス


  • 問題の説明:

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

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

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

    例えば、マップは7×3のグリッドです。どのように多くの可能なパスを持っていますか?LeetCodeオリジナルタイトル

  • 分析:

    障害物が存在しないので、これは、比較的単純な動的プログラミング問題である(障害の2つの異なるパスグリッド)は

    各ステップが唯一の右または下にすることができますので、それは非常に明白である、あなたは、各グリッドの1行1列目が1であることを知ることができます。

    だけ右ダウンため、パス2は、右→→右または下に、2つの位置のみを達成することができます。同様に、最初の列以外の任意の他の位置のパスの番号の最初の行は、現在の位置と正面と上部パスに等しいです。だから、最後のパスを得ることができること:

    dp[m-1][n-1] = dp[m-1][n-2] + dp[m-2][n-1]
  • コードの実装:

    public class UniquePaths_62{
        public static void main(String[] args) {
            Solution4 solution = new Solution4();
           int res = solution.uniquePaths(1,1);
            System.out.println(res);
        }
    
    }
    
    class Solution {
        public int uniquePaths(int m, int n) {
            //1.初始化第一行第一列
            int[][] dp = new int[m][n];
            for (int i = 0; i < dp.length; i++) {
                for (int j = 0; j < dp[0].length; j++) {
                    dp[0][j] = 1;
                    dp[i][0] = 1;
                }
            }
    
            for (int i = 1; i < dp.length; i++) {
                for (int j = 1; j < dp[0].length; j++) {
                    dp[i][j] = dp[i][j-1] + dp[i-1][j];
                }
            }
            return dp[m-1][n-1];
        }
    }

    パフォーマンス:

    (1)時間計算量:O(M * N)

    (2)空間的複雑:O(M * N)


  • 最後に:

    限られた個人的なレベルのためには、ボーエンは、ミスや急行不正確は、ギャングの批判を歓迎することは避けられません。あなたの意見を残すコメント欄を歓迎するより良い方法は、前方転載を歓迎する場合は、ソースを示すために覚えています。コードワードは容易ではない、任意のヘルプ場合は、コーヒーの報酬カップを歓迎するために遅くまで起きて、あなたの上司に感謝~~~

おすすめ

転載: www.cnblogs.com/coding-996/p/12324505.html