背景 我今天接受了一次采访,被问到以下问题。
给你一个网格。
int [][] grid =
{
{0,0,0,2,5},
{0,0,0,1,5},
{0,1,1,1,1},
{2,0,0,0,0}
};
您从网格的左下角开始。你只能向上和向右。这个想法是到达右上角。你要走一条能给你带来最大价值的道路。
上面的输出是 16
我的解决方案
public static int getPathMaxSum(int [][] grid){
int row = grid.length-1;
int col = 0;
int currentSum = grid[row][col];
return getMax(grid,currentSum,row,col);
}
public static int getMax(int [][] grid,int sum,int row,int col){
if((isTopRight(grid,row,col)) || (!isValid(grid,row,col))){
return sum;
}else{
sum = sum + grid[row][col];
return Math.max(getMax(grid,sum,row-1,col),getMax(grid,sum,row,col+1));
}
}
public static boolean isTopRight(int [][] grid, int row, int col){
return row == 0 && col == grid[row].length-1;
}
public static boolean isValid(int [][] grid, int row, int col){
return (row >= 0 && row < grid.length) && (col >= 0 && col < grid[row].length);
}
我正在尝试递归地解决这个问题。我认为我在每个位置都有 2 个可能的选择,并且我想获得这两个选择中的最大值,但由于某种原因我无法获得正确的输出。
我有两个辅助函数,它们检查我的位置在网格内是否有效,以及我是否已经点击了右上角,如果有,那么我就点击了我的基本情况。
我很想知道我哪里出错了。
慕桂英546537
守着星空守着你
相关分类