我在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);
}
我感觉到我缺少一些重要的东西。一种方法如何解决这样的问题?
谢谢!