【发布时间】:2023-04-03 22:25:01
【问题描述】:
我正在尝试编写下一个程序:
仅包含正整数的二维方阵。 每个单元格只能出现在路径上一次,编写一个递归布尔静态方法,该方法接受一个包含数字(大于零)和任何正和总和的二维 mat 数组作为参数,该方法作为参数给出与 mat 大小相同的二维数组,它应该检查数组中是否存在总和为 sum 的路径。否则会返回false值,path用来标记路径sum sum: 最初,当path数组作为参数传入时,它的所有单元格都包含sum 方法的最后,如果有路径在 mat 数组 sum sum 中,路径数组将在参与路径的单元格中包含 1,在所有其他单元格中包含 0。如果 mat 数组中没有这样的路径,则路径数组应该包含值 0 如果有多条路径 一和总和,数组路径将包含路径总和之一(任意)。例如,给定数组 mat 如下:
和和4,方法返回true,路径数组可以是以下三个数组之一:
我试过了:
public static boolean findSum(int i, int j, int mat[][], int sum, int path[][]){
if(sum == 0) {
return true;
}else if(sum < 0) {
return false;
}else if (i < mat.length - 1 && findSum(i + 1, j, mat, sum - mat[i][j], path)) {
path[i][j] = 1;
return true;
}else if (i < mat.length - 1 && findSum(i + 1, j, mat, sum, path))
return true;
else if (j < mat.length - 1 && findSum(i, j + 1, mat, sum - mat[i][j], path)) {
path[i][j] = 1;
return true;
}else if (j < mat.length - 1 && findSum(i, j + 1, mat, sum, path))
return true;
return false;
}
public static boolean findSum (int mat[][], int sum, int path[][]){
if(findSum(0,0, mat, sum, path)) {
System.out.println(Arrays.deepToString(path));
return true;
}else {
return false;
}
}
我得到了:
1 | 0 | 0 | 0
1 | 0 | 0 | 0
1 | 0 | 0 | 0
0 | 0 | 0 | 0
问题是我的路径太长了,有 2 条路径
【问题讨论】: