题解 | #暮光数独验证# java
暮光数独验证
https://www.nowcoder.com/practice/68dd2d15263f433db6ffa0405d08426a
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param board char字符型二维数组 * @return bool布尔型 */ public boolean isValidTwilightSudoku (char[][] board) { // write code here // 检查每行是否有效 for (int i = 0; i < 9; ++i) { if (!isValidRow(board, i)) { return false; } } // 检查每列是否有效 for (int j = 0; j < 9; ++j) { if (!isValidColumn(board, j)) { return false; } } // 检查每个 3x3 小格子是否有效 for (int i = 0; i < 9; i += 3) { for (int j = 0; j < 9; j += 3) { if (!isValidGrid(board, i, j)) { return false; } } } return true; } // 检查一行是否有效 public boolean isValidRow(char[][] board, int row) { boolean[] used = new boolean[9]; for (int j = 0; j < 9; ++j) { if (board[row][j] != '.') { int num = board[row][j] - '1'; if (used[num]) { return false; } used[num] = true; } } return true; } // 检查一列是否有效 public boolean isValidColumn(char[][] board, int col) { boolean[] used = new boolean[9]; for (int i = 0; i < 9; ++i) { if (board[i][col] != '.') { int num = board[i][col] - '1'; if (used[num]) { return false; } used[num] = true; } } return true; } // 检查一个 3x3 小格子是否有效 public boolean isValidGrid(char[][] board, int row, int col) { boolean[] used = new boolean[9]; for (int i = row; i < row + 3; ++i) { for (int j = col; j < col + 3; ++j) { if (board[i][j] != '.') { int num = board[i][j] - '1'; if (used[num]) { return false; } used[num] = true; } } } return true; } }
编程语言是Java。
该题考察的知识点包括:
- 多维数组遍历和操作: 九宫格数独是一个二维数组,需要遍历不同的行和列以检查有效性。
- 基本数学的数独定义
遍历每一行,调用 isValidRow
方法检查每行是否有效。
isValidColumn
方法检查每列是否有效。isValidGrid
方法检查每个小格子是否有效。如果所有部分均有效,则返回 true
,表示数独是有效的"Twilight Sudoku"。如果在任何部分中发现无效情况,算法将返回 false
,表示数独无效。