栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

leetcode 576. Out of Boundary Paths | 576. 出界的路径数(暴力递归->傻缓存->dp)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

leetcode 576. Out of Boundary Paths | 576. 出界的路径数(暴力递归->傻缓存->dp)

题目

https://leetcode.com/problems/out-of-boundary-paths/

题解

经典的 从递归到 dp,不多说,上代码。

class Solution {
    public static final int MOD = (int) (Math.pow(10, 9) + 7);

    public int findPaths(int m, int n, int maxMove, int startRow, int startColumn) {
        // 【Solution 1】暴力递归
//        return process1(m, n, maxMove, startRow, startColumn);
        
        // 【Solution 2】傻缓存
       // int[][][] dp = new int[maxMove + 1][m][n];
       // for (int move = 1; move <= maxMove; move++) { // 剩余步数move=0时,dp表内的位置均不存在paths
       //     for (int i = 0; i < m; i++) {
       //         Arrays.fill(dp[move][i], -1);
       //     }
       // }
       // return process2(m, n, maxMove, startRow, startColumn, dp);
        
        // 【Solution 3】dp
        int[][][] dp = new int[maxMove + 1][m][n];
        for (int move = 1; move <= maxMove; move++) {
            for (int i = 0; i < m; i++) {
                for (int j = 0; j < n; j++) {
                    int path = 0;
                    path += (i - 1 < 0) ? 1 : dp[move - 1][i - 1][j]; path %= MOD;
                    path += (i + 1 == m) ? 1 : dp[move - 1][i + 1][j]; path %= MOD;
                    path += (j - 1 < 0) ? 1 : dp[move - 1][i][j - 1]; path %= MOD;
                    path += (j + 1 == n) ? 1 : dp[move - 1][i][j + 1]; path %= MOD;
                    dp[move][i][j] = path;
                }
            }
        }
        return dp[maxMove][startRow][startColumn];
    }

//     public int process1(int m, int n, int remain, int i, int j) {
//         if (remain < 0) return 0;
//         if (i == m || j == n || i < 0 || j < 0) return 1;
//         return process1(m, n, remain - 1, i + 1, j) +
//                 process1(m, n, remain - 1, i - 1, j) +
//                 process1(m, n, remain - 1, i, j + 1) +
//                 process1(m, n, remain - 1, i, j - 1);
//     }

//     public int process2(int m, int n, int remain, int i, int j, int[][][] dp) {
//         if (remain < 0) return 0;
//         if (i == m || j == n || i < 0 || j < 0) return 1;
//         if (dp[remain][i][j] >= 0) return dp[remain][i][j];
//         dp[remain][i][j] = process2(m, n, remain - 1, i + 1, j, dp) % (MOD);
//         dp[remain][i][j] += process2(m, n, remain - 1, i - 1, j, dp); dp[remain][i][j] %= MOD;
//         dp[remain][i][j] += process2(m, n, remain - 1, i, j + 1, dp); dp[remain][i][j] %= MOD;
//         dp[remain][i][j] += process2(m, n, remain - 1, i, j - 1, dp); dp[remain][i][j] %= MOD;
//         return dp[remain][i][j];
//     }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/298750.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号