该函数将接收一个二维矩阵数组,其中每个器官都是一个整数(大于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;
}