62. 不同路径(Java)(回溯正向递归;动规正向迭代;动规逆向递归;一条龙)

1 题目

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。

问总共有多少条不同的路径?
在这里插入图片描述
例如,上图是一个7 x 3 的网格。有多少可能的路径?

示例 1:

输入: m = 3, n = 2
输出: 3
解释:
从左上角开始,总共有 3 条路径可以到达右下角。

  1. 向右 -> 向右 -> 向下
  2. 向右 -> 向下 -> 向右
  3. 向下 -> 向右 -> 向右
    示例 2:

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

提示:

1 <= m, n <= 100
题目数据保证答案小于等于 2 * 10 ^ 9

2 Java

2.1 方法一(回溯正向递归,超时)

class Solution {
    int sum = 0;
    public int uniquePaths(int m, int n) {
        helper(0, 0, m, n);
        return sum;
    }

    public void helper(int i, int j, int m, int n){
        // if判断是否记录结果
        if(i == m - 1 && j == n - 1){
            sum++;  return;
        }
        // for循环多路选择
        if(i < m - 1)   helper(i + 1, j, m, n);
        if(j < n - 1)   helper(i, j + 1, m, n);
    }
}

2.2 方法二(动规正向迭代)

class Solution {
    public int uniquePaths(int m, int n) {
        // 创建备忘录(不用初始化,在for里单另情况写吧)
        int[][] dp = new int[m][n];

        // 外层for向前步进
        for(int i = 0; i < m; i++){
            for(int j = 0; j < n; j++){
                if(i == 0 && j == 0)    dp[i][j] = 1;
                else if(i == 0)         dp[i][j] = dp[i][j - 1];
                else if(j == 0)         dp[i][j] = dp[i - 1][j];
                // 内层for多路择优(从2种状态跳转)
                else                    dp[i][j] = dp[i][j - 1] + dp[i - 1][j];
            }
        }

        return dp[m - 1][n - 1];
    }
}

2.3 方法三(动规逆向递归)

class Solution {
    int[][] dp;
    public int uniquePaths(int m, int n) {
        // 初始化备忘录
        dp = new int[m][n];
        for(int i = 0; i < m; i++)  dp[i][0] = 1;
        for(int j = 0; j < n; j++)  dp[0][j] = 1;

        helper(m - 1, n - 1);
        return dp[m - 1][n - 1];
    }

    public int helper(int i, int j){
        // if判断是否有记录
        if(dp[i][j] != 0)    return dp[i][j];

        // for循环多路择优
        dp[i][j] = helper(i - 1, j) + helper(i, j - 1);
        return dp[i][j];
    }
}
发布了131 篇原创文章 · 获赞 0 · 访问量 2265

猜你喜欢

转载自blog.csdn.net/weixin_43969686/article/details/105309449