如何使用递归找到二维数组中给定差异的最长序列?

时间:2019-01-15 09:10:44

标签: java arrays recursion

我在Java中有这个练习,我似乎无法破解。该问题将整数二维数组中的度数n的斜率定义为一系列相邻单元,其值相差n。练习是编写一个函数longestSlope(int [] [] mat,int n),该函数返回给定数组mat中最长n斜率的长度。

斜坡可以包括水平,对角和垂直相邻的像元。

下面给出了我的尝试,但是我可以理解我不知道如何实现的缺失部分。递归没有停止条件,而且我不确定这些条件应该是什么。另外,该函数对单元进行多次计数,并且由于此实现的递归性质,我不知道如何确切地解决此问题。 最后,也是最关键的一点,递归不允许内存,因此,我无法检查哪个斜率最长。在这里给出的代码中,我仅给出差值为n的邻居数。

public static int recArray2(int[][] mat, int i, int j, int num)
{
   if(i < mat.length && j < mat[0].length 
   && Math.abs(mat[i][j] - mat[i+1][j+1]) == num)
   {
       return 1 + recArray2(mat, i+1, j+1, num); 
   }

   if(i < mat.length && Math.abs(mat[i][j] - mat[i+1][j]) == num)
   {
        return 1 + recArray2(mat, i+1, j, num);    
   }

   if(j < mat[0].length && Math.abs(mat[i][j] - mat[i][j+1]) == num)
   {
        return 1 + recArray2(mat, i, j+1, num);    
   }

   if(i < mat.length[0])
   {
       return recArray2(mat, i++, j, num);
   }else{
       return recArray2(mat, 0, j++, num);
   }
}

public static int longestSlope(int[][] mat, int num)
{
    return recArray2(mat, 0, 0, num); 
}

我感觉到我缺少一些重要的东西。一种方法如何解决这样的问题?

谢谢!

0 个答案:

没有答案