力扣62 不同路径

题目:

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。
问总共有多少条不同的路径?

示例:

输入:m = 3, n = 7
输出:28

思路:

我觉得如果拿到题一开始没有思路,可以用举例法,将所有情况从1开始列出,整理成表格(m横向n纵向)。

  1 2 3 4 5 6
1  1 1 1 1 1 1
2  1  2  3 4 5 6
3  1  3  6  10 15 21
4  1  4  10  20 35 56
5  1  5  15  35 70 126
6  1  6 21  56  126  512

 可以看出,输出等于左侧和上侧数字之和,这也符合题目思路,当前选择路径只需要再上一次选择的基础上再次多走一些格子即可。

class Solution {
    public int uniquePaths(int m, int n) {
        //1.确定dp数组(dp table)以及下标的含义:dp[i][j]:从(0,0)到(i,j)的路径数
        int[][] dp=new int[m][n];
        //2.确定递推公式:dp[i][j]=dp[i-1][j]+dp[i][j-1]
        //3.dp数组的初始化:dp[0][j]=1,dp[i][0]=1(注意下标0其实代表m,n=1,第一列和第二列的输出都为1)
        for (int i=0;i<m;i++) dp[i][0] = 1;
        for (int j=0;j<n;j++) dp[0][j] = 1;
        //4.确定遍历顺序:两层循环
         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];
            }
        }
        //5.举例推导dp数组
        return dp[m-1][n-1];//一定注意这里不是dp[m][n]
    }
}

 

posted @ 2023-02-23 22:01  壹索007  阅读(14)  评论(0编辑  收藏  举报