class Solution {
public:
vector<vector<long>> dp;
int uniquePaths(int m, int n) {
//方法一:使用 dfs 超时
// int res = 0;
// dfs(m, n, 0, 0, res);
// return res;
//方法二:从大到小的动态规划,使用的是递归
//dp[i][j]: 表示从索引坐标[i][j]走到终点的路径个数
if (dp.empty())
dp.assign(m, vector<long>(n, -1));
//状态转移方程
return helper(m,n,0,0,dp);
}
void dfs(int m, int n, int r, int c, int& res)
{
if (r >= m || c >= n)
return;
if (r == m-1 && c == n-1)
{
++res;
return;
}
dfs(m, n, r+1, c, res);
dfs(m, n, r, c+1, res);
}
long helper(int m, int n, int r, int c, vector<vector<long>>& dp)
{
if (r >= m || c >= n)
return 0;
if (r == m-1 && c == n-1)
return 1;
if (dp[r][c] != -1)
return dp[r][c];
dp[r][c] = helper(m,n,r+1,c,dp) + helper(m,n,r,c+1,dp);
return dp[r][c];
}
};
1 题目剑指 Offer II 098. 路径的数目62. 不同路径2 实现class Solution {public: vector<vector<long>> dp; int uniquePaths(int m, int n) { //方法一:使用 dfs 超时 // int res = 0; // dfs(m, n, 0, 0, res); // return res;