【问题标题】:Check whether there is a path in an array whose sum is sum by recursion in java在java中通过递归检查数组中是否存在总和为总和的路径
【发布时间】: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 条路径

【问题讨论】:

标签: java arrays recursion


【解决方案1】:

假设您的算法在其他方面是正确的,我相信您传递的 2D 路径数组始终引用同一个数组。因此,当一个元素设置为 1 一次时,该数组的后续使用也将始终将该元素设置为 1。解决此问题的最简单方法是执行类似(未检查语法)

    int[][] tempPath= new int[path.length()][path[0].size()];

    tempPath= path;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-17
    • 2015-08-30
    • 2016-11-07
    • 2021-08-28
    • 1970-01-01
    • 2018-12-04
    相关资源
    最近更新 更多