1.题目解析
题目来源:62.不同路径——力扣
测试用例
2.算法原理
1.状态表示
这时由于避免越界初始化所以将左上角置为虚拟位置,创建一个二维dp表用来存储到当前为止的所有路径
2.状态转移方程
以dp[i,j]为例,起点到该位置的路径是起点到其上面位置的路径与起点到其左边为止的路径之和,表示为dp[i][j]=dp[i-1][j]+dp[i][j-1]
3.初始化
这里只初始化dp[0][1]的位置为1,其他虚拟位置都为0即可,然后使用状态转移方程初始化其他节点
4.填表顺序
从上往下每一行填表,每一行从左向右填表
5.返回值
由于我们多开了一排一列,所以第[m,n]个位置就是dp[m][n]
3.实战代码
class Solution {
public:
int uniquePaths(int m, int n)
{
vector<vector<int>> dp(m+1,vector<int>(n+1));
//初始化虚拟位置,其他虚拟位置初始化默认为1
dp[0][1] = 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][n];
}
};