二维数组中的移动(矩阵)总最大选项-递归Java

时间:2019-01-09 21:18:51

标签: java recursion matrix

该函数将接收一个二维矩阵数组,其中每个器官都是一个整数(大于0)。您只能在四个选项(下,上,右,左)中移动矩阵的想法,而不是对角移动。 函数从数组中最长的num序列返回斜率的长度

int[][] mat = {
                {3,13,15,28,30},
                {55,54,53,27,26},
                {54,12,52,51,50},
                {50,10,8,53,11}
              };

int num = 1;
TEST2.slopenum(mat,num);

我的输出: num => 1 预期结果=> 6,我的结果= 5 -错误的答案

num => 2 预期结果=> 3,我的结果= 3 -好答案

当Num = 2时,我们在矩阵之间移动并寻找相邻的部分(不是对角,而是仅上下左右),它们之间的差为2。

例如:

如果num = 2,则有4种不同的选择:

1:在单元格2中| 1(矩阵中的2代表行号,1代表列号)至3 | 2有器官8,10,12(数字之间相差2)意味着长度为3。

2:在单元格0中| 2至0 | 1有器官13,15,即长度为2。

3:在单元格0中| 2至0 | 1有器官13,15,即长度为2。

4:在单元格0中| 2至0 | 1有器官13,15,即长度为2。

问题: 当Num = 1(函数返回5而不是6)时,我的输出不能正确显示,尽管在num = 2中,函数返回3,这是正确的。 B.我不能在函数中使用任何循环(FOR,WHILE)。

我的代码:

  public static int slopenum(int[][] mat, int num) {
      int max = 0;
      for (int row = 0; row < mat.length; row++) {
       for (int col = 0; col < mat[0].length; col++) {
        max = Math.max(max, slopenum(mat, num, row, col, 1));
       }
      }
      return max;
     }


     private static int slopenum(int[][] mat, int num, int row, int col, int Step) {

      if ((row + 1) < mat.length && mat[(row + 1)][(col + 0)] == mat[row][col] - num) //right
       return slopenum(mat, num, row + 1, col, Step + 1);

      if ((row - 1) >= 0 && mat[(row - 1)][(col + 0)] == mat[row][col] - num) //left
       return slopenum(mat, num, row - 1, col, Step + 1);

      if ((col + 1) < mat[0].length && mat[(row - 0)][(col + 1)] == mat[row][col] - num) //up
       return slopenum(mat, num, row, col + 1, Step + 1);

      if ((col - 1) >= 0 && mat[(row + 0)][(col - 1)] == mat[row][col] - num) //down
       return slopenum(mat, num, row, col - 1, Step + 1);

      else return Step;
     }

0 个答案:

没有答案