代码如下
class Solution {
public:int uniquePaths(int m, int n) {vector<vector<int> > dp(m, vector<int>(n, 0));for(int i = 0; i < m; i++){dp[i][0] = 1;}for(int j = 0; j < n; j++){dp[0][j] = 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];}
};
题目解释,首先一定要明白机器人是只能往右和往下走,走到右下角的路径有多少个,所以第一步我们先确定下来dp[i][j]的含义,既然求路径多少个,那么我们不妨定义dp[i][j]含义就是走到右下角有几种方法,根据含义推到dp[i][j]的状态转移方程,我们可知,dp[i][j] = dp[i - 1][j] + dp[i - 1][j];为什么这么定义,是因为我们所走的每一步都是从上一步得来的,所以不是从左边过来就是从上面过来到(i,j)这个位置。然后初始化,既然只能往左或者往后走,那么就把最上面的一行和最左边的一列统统初始化为1,这样能够保证我们继续往后走,然后确定遍历,不用想,肯定是从1开始的,不会说从0开始,不能一直站在那里不动。然后返回dp[m - 1][n - 1];