题目描述

题解
// 动态规划
// 假设f(i,j)为走到(i,j)位置存在的路径数量,由于只能右走和往下走,
// 走到(i,j)包含可能是从(i-1,j)走过来的,或者是(i,j-1)走过来的这两种情况。
// 所以走到(i,j)这个位置存在的路径,就等于走到(i-1,j)和走到(i,j-1)这两种情况,
// 所包含的路径数量之和,f(i,j) = f(i-1,j) + f(i,j-1)。
// 构建dp矩阵dp = new int[m][n],为了动态规划遍历,将第一行和第一列所有元素,
// 初始化为1。dp[i][j]表示走到(i,j)这个位置所存在的路径数量。
// 双for循环,i从1到m-1遍历行索引,j从1到n-1遍历列索引,
// 令dp[i][j]等于dp[i-1][j] + dp[i][j-1],循环结束之后,答案就存在dp[m-1][n-1]
// 位置,直接返回即可。
//
// 执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
// 内存消耗:35.3 MB, 在所有 Java 提交中击败了39.51%的用户
class Solution {
int res = 0;
public int uniquePaths(int m, int n) {
int[][] dp = new int[m][n];
for (int i = 0; i < m; i++) {
dp[i][0] = 1;
}
for (int i = 0; i < n; i++) {
dp[0][i] = 1;
}
for (int i = 1; i < m; i++) {
for (int j = 1; j < n; j++) {
dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
}
}
return dp[m - 1][n - 1];
}
}