如何编写函数实现field列内所有字符相同时返回true的功能
问题解答
现有代码问题
- 逻辑错误:
field[i][j] == field[i][j]是元素自身对比,结果永远为true,进入循环后第一时间就会返回true,完全没有完成列元素一致性校验的作用 - 循环逻辑不符合需求:当前循环顺序是逐行逐列遍历,且第一次判断就直接return,既没有按列做对比,也没有遍历完整的列内容
优化实现
默认按「判断指定列所有元素是否完全相同」实现,如果需要判断所有列都满足所有元素相同,可在外层加列遍历循环即可。
- 以上实现的时间复杂度为O(n)(n为二维数组元素总个数),不需要多余的空间开销,满足常规场景的性能要求。
判断指定列全相同的代码
// 入参说明:field是二维字符数组,targetColumn是要校验的列索引 public boolean isColumnAllSame(char[][] field, int targetColumn) { // 边界校验:数组为空、目标列超出范围直接返回false if (field == null || field.length == 0 || targetColumn < 0 || targetColumn >= field[0].length) { return false; } // 取目标列第一个元素作为基准 char base = field[0][targetColumn]; // 遍历目标列的所有行 for (int i = 1; i < field.length; i++) { if (field[i][targetColumn] != base) { // 有一个元素不一致直接返回false return false; } } // 遍历完成没有不一致项,返回true return true; }
判断是否存在任意一列全相同的代码
public boolean hasAnySameColumn(char[][] field) { if (field == null || field.length == 0 || field[0].length == 0) { return false; } int columns = field[0].length; // 遍历所有列 for (int j = 0; j < columns; j++) { char base = field[0][j]; boolean isSame = true; for (int i = 1; i < field.length; i++) { if (field[i][j] != base) { isSame = false; break; } } if (isSame) { return true; } } return false; }
内容的提问来源于stack exchange,提问作者noNAme
相关产品推荐
相关产品推荐

