【发布时间】:2023-01-28 14:45:05
【问题描述】:
这个算法让我难住了。我是数据结构和算法的新手,我了解代码需要做什么,但无法全神贯注于如何实际编码。
问题如下:
确定矩阵是否包含金票。一张金票由 6 个大写字母“G”组成,其中三对 G 位于彼此的正上方,如下所示。请注意,我省略了单引号以提高可读性。
GG GG GG
例如。,
[A b - - C d m]
[- G G ZGG-]
[H o - rGGD] 这个矩阵返回真
[H o - rGGD]
例如。,
[RgG- C d m W]
[-GGZGG- r] 这个矩阵返回 false
[oGGrGGD]因为G不在指定位置
[ST C -GGa -] 相对于彼此
矩阵应该是“矩形”的,这意味着所有行都应该有相同数量的元素。如果不是这种情况,则应抛出 IllegalArgumentException。
这是我写的:
public static boolean goldenTicket(char[][] matrix) {
if (matrix == null) return false;
if (matrix.length == 0) return false;
char char1, char2;
int matchCount = 0;
int indexOne = 0, indexTwo = 0, prevIndex1 = 0,prevIndex2 = 0;
int rows = matrix.length;
int columns = matrix[0].length;
for(int i = 0; i < rows;i++) {
if(matrix[i].length != columns)
throw new IllegalArgumentException("Length of row doesn't match");
if(matrix[i].length == 0) return false;
if(matchCount == 3) return true;
for(int j=1;j<columns;j++) {
if(matrix[i][j] == 'G' && matrix[i][j - 1] =='G') {
if(prevIndex1 == 0 && prevIndex2 == 0) {
indexOne = j-1;
indexTwo = j;
matchCount++;
}
else {
prevIndex1 = j-1;
prevIndex2 = j;
matchCount++;
}
}
}
if(prevIndex1 == indexOne && prevIndex2 == indexTwo) {
matchCount++;
}
}
return false;
}
但是,问题是代码通过了上面的示例一和示例二,而不是仅通过了示例 1。 我已经交了作业,只通过了 24/25 测试,我真的很想了解它应该如何工作,也许是一种更好的编码方式以供将来参考。
提前致谢!
【问题讨论】:
标签: java arrays algorithm multidimensional-array data-structures