【发布时间】:2017-07-06 21:50:11
【问题描述】:
我有以下问题: 对于 nXn 矩阵,我们将定义一个大小为 k 的“蠕虫”,它是一系列具有连续数字的相邻单元格。相邻单元格是当前单元格右\左\上\下的单元格(不是对角线)。 我需要编写一个递归函数,它返回数组中最长的蠕虫 例如:在矩阵中:
{{3,4,5,6},
{5,6,2,7},
{12,13,14,15},
{19,18,17,16}};
最长的蠕虫是 8 个细胞。从 [2][0] 开始,到 [3][0] 结束。
到目前为止,我已经编写了以下代码:
public static int longestWarm(int[][] arr, int row, int col) {
if (row < 0 || row >= arr.length || col < 0 || col >= arr.length) return 0;
if (col >= arr.length || row >= arr.length) return 0;
int sum1 = 1, sum2 = 1, sum3 = 1, sum4 = 1;
if (row > 0 && arr[row][col] == arr[row - 1][col] - 1)
sum1 = 1 + longestWarm(arr, row - 1,col);
else if (row < arr[0].length - 1 && arr[row][col] == arr[row + 1][col] - 1)
sum2 = 1 + longestWarm(arr, row + 1, col);
else if (col > 0 && arr[row][col] == arr[row][col - 1] - 1)
sum3 = 1 + longestWarm(arr, row, col - 1);
else if (col < arr[0].length - 1 && arr[row][col] == arr[row][col + 1] - 1)
sum4 = 1 + longestWarm(arr, row, col + 1);
int max1 = Math.max(sum1, sum2);
int max2 = Math.max(sum3, sum4);
return Math.max(max1, max2);
}
问题是我得到了我在矩阵中找到的第一个蠕虫,而不是最大的一个。我的输出是 5 而不是 8。 请帮助找出我做错了什么。
【问题讨论】:
-
欢迎来到 Stack Overflow!看来您需要学习使用调试器。请帮助自己一些complementary debugging techniques。如果之后您仍有问题,请随时返回 Minimal, Complete and Verifiable Example 来证明您的问题。
-
我想你想摆脱
elses。此外,在顶层,您需要为每个数组元素调用一次提供的方法,并获取这些结果中的最大值。 -
@JohnBollinger 感谢他的工作,现在我创建了另一种方法来检查当前计数是否大于 maxcount,然后返回最大值