Java实现 LeetCode 576 出界的路径数(DFS || DP)

墨蓝 2023-05-28 06:55 20阅读 0赞

576. 出界的路径数

给定一个 m × n 的网格和一个球。球的起始坐标为 (i,j) ,你可以将球移到相邻的单元格内,或者往上、下、左、右四个方向上移动使球穿过网格边界。但是,你最多可以移动 N 次。找出可以将球移出边界的路径数量。答案可能非常大,返回 结果 mod 109 + 7 的值。

示例 1:

输入: m = 2, n = 2, N = 2, i = 0, j = 0
输出: 6
解释:
在这里插入图片描述
示例 2:

输入: m = 1, n = 3, N = 3, i = 0, j = 1
输出: 12
解释:

在这里插入图片描述

说明:

球一旦出界,就不能再被移动回网格内。
网格的长度和高度在 [1,50] 的范围内。
N 在 [0,50] 的范围内。
PS:
小编的传统的DFS
大佬弄得动态规划

  1. class Solution {
  2. private Integer[][][] cache;
  3. public int findPaths(int m, int n, int N, int i, int j) {
  4. cache = new Integer[m][n][N+1];
  5. return dfs(m,n,N,j,i);
  6. }
  7. private int dfs(int rows,int cols,int times,int x,int y) {
  8. if (isOutOfBoundary(x,y,rows,cols)) {
  9. return 1;
  10. }
  11. if (0 == times) {
  12. return 0;
  13. }
  14. if (null != cache[y][x][times]) {
  15. return cache[y][x][times];
  16. }
  17. int res = (((dfs(rows,cols,times-1,x+1,y) + dfs(rows,cols,times-1,x-1,y)) % 1000000007) + ((dfs(rows,cols,times-1,x,y+1) + dfs(rows,cols,times-1,x,y-1)) % 1000000007)) % 1000000007;
  18. cache[y][x][times] = res;
  19. return res;
  20. }
  21. private boolean isOutOfBoundary(int x,int y,int rows,int cols) {
  22. return x < 0 || x >= cols || y < 0 || y >= rows;
  23. }
  24. }
  25. class Solution {
  26. public int findPaths(int m, int n, int N, int i, int j) {
  27. if(N <= 0) return 0;
  28. int mod = 1000000007;
  29. int ret = 0;
  30. int[][] dp = new int[m][n]; // 保存第k步的结果
  31. int[][] dirs = { { -1, 0}, { 1, 0}, { 0, -1}, { 0, 1}};
  32. for(int k = 1; k <= N; ++k) {
  33. int[][] temp = new int[m][n]; // 保存第k-1步的结果
  34. for(int x = 0; x < m; ++x) {
  35. for(int y = 0; y < n; ++y) {
  36. for(int[] dir : dirs) {
  37. int nx = x + dir[0];
  38. int ny = y + dir[1];
  39. if(nx < 0 || nx >= m || ny < 0 || ny >= n)
  40. temp[x][y] += 1;
  41. else
  42. temp[x][y] = (dp[nx][ny] + temp[x][y]) % mod;
  43. }
  44. }
  45. }
  46. dp = temp;
  47. }
  48. return dp[i][j];
  49. }
  50. }

发表评论

表情:
评论列表 (有 0 条评论,20人围观)

还没有评论,来说两句吧...

相关阅读