class Solution {public int getMaximumGold(int[][] grid) {}
}
1.哪些点可以作为起始点?
遍历数组,只要不是0的位置都可以作为起始点
2.寻找下一步位置的时候,如何判断走哪里
用一个相同大小的boolean数组来记录走过的位置**,走过的位置记为true**
3.下一个位置可以走哪里?
不可以走边,即i和j走到边界的时候
下一个位置不是0的地方
4.回溯法过程
进来先判断是否到达边界条件或者下一部可能要终止.
更新最大黄金数目
回溯走四个方向
Integer result = 0;public int getMaximumGold(int[][] grid){//对于每一个不是0的位置都可以当作起始点作为开始的位置//用一个同样大的二维数组来记录走过的路线boolean[][] visit = new boolean[grid.length][grid[0].length];for(int i = 0;i < grid.length;i++){for(int j = 0;j < grid[0].length;j++){if(grid[i][j] != 0){backTrace(i,j,0,grid,visit);}}} return result;}/*** i和j代表当前的位置,可以确定下一步要走的位置* cur代表目前为止的黄金数目* @param i* @param j* @param cur*/public void backTrace(int i,int j,int cur,int[][] grid,boolean[][] visit){//更新最大的黄金数目if((i < 0 || i > grid.length-1) || (j < 0 || j > grid[0].length-1)|| grid[i][j] == 0||visit[i][j]){result = Math.max(result, cur);return;}cur += grid[i][j];visit[i][j] = true;//接下来分别让其走四个方向.backTrace(i-1,j,cur,grid,visit);backTrace(i+1,j,cur,grid,visit);backTrace(i,j-1,cur,grid,visit);backTrace(i,j+1,cur,grid,visit);visit[i][j] = false;}
本文发布于:2024-01-31 17:05:51,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170669195230069.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |