問題の説明:
左コーナー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)
最後に:
限られた個人的なレベルのためには、ボーエンは、ミスや急行不正確は、ギャングの批判を歓迎することは避けられません。あなたの意見を残すコメント欄を歓迎するより良い方法は、前方転載を歓迎する場合は、ソースを示すために覚えています。コードワードは容易ではない、任意のヘルプ場合は、コーヒーの報酬カップを歓迎するために遅くまで起きて、あなたの上司に感謝~~~
LeetCode.62--異なるパス
おすすめ
転載: www.cnblogs.com/coding-996/p/12324505.html
おすすめ
ランキング