
力扣36.有效的数独
发布日期:2021-05-15 01:04:55
浏览次数:24
分类:精选文章
本文共 752 字,大约阅读时间需要 2 分钟。
题目:
一幅9x9的网格组成的数独谜题,要求使用数字1到9填充每个空格,且在每行、每列及每个九宫格中,数字均不重复。思路:
建立一个二维数组遍历整个数独网格。对于每一个空格,检查其所在的行、列和九宫格是否已经包含该数字。一旦发现重复,则该数独无效,否则继续填充。这种方法通过记录每行每列每个九宫格的数字构建了三重检查机制,确保数独的完整性和有效性。代码实现:
以下是用C语言实现的数独校验函数:[code]bool isValidSudoku(char** board, int boardSize, int* boardColSize) {int x[9][9] = {0}, y[9][9] = {0}, s[3][3][9] = {0};
int i, j, num, sx, sy;for (i = 0; i < 9; i++) {for (j = 0; j < 9; j++) {if (board[i][j] == '.') continue;sx = i / 3, sy = j / 3;num = board[i][j] - '1';if (x[i][num] == 1 || y[j][num] == 1 || s[sx][sy][num] == 1) {return false;}x[i][num] = 1;y[j][num] = 2;s[sx][sy][num] = 1;}}return true;}[/code]这个函数通过三维数组x、y和s记录每行、每列以及每个九宫格的数字使用情况。遍历整个数独网格,对于每一个空格,检查它是否已经在其所在的行、列或九宫格中出现。若发现重复,立即返回false,否则填充对应的标记,继续检查下一个空格。最后返回true表示数独有效。