有效数独
问题描述
判断一个 9x9 的数独是否有效。需要满足三个条件:
1. 数字 1-9
在每一行只能出现一次
2. 数字 1-9
在每一列只能出现一次
3. 数字 1-9
在每一个以粗实线分隔的 3x3
宫内只能出现一次。
解决思路
使用三个数组分别保存每行、每列、每个小方格中字符 1-9 出现的次数,遍历过程中,如果出现了某个位置的次数已经大于 0 的字符,则说明不满足条件了,返回 False;遍历结束说明这是一个有效数独,返回 True。
Java代码
1 public class Solution { 2 public boolean isValidSudoku2(char[][] board) { 3 // 利用数组判断数字是否重复,true代表重复 4 // row[7][1] 代表第 7+1 行 的字符 1+1 = 2 已经使用过了 5 int[][] row = new int[9][9]; 6 int[][] col = new int[9][9]; 7 int[][][] cell = new int[3][3][9]; 8 for (int i = 0; i < 9; i ++) { 9 for (int j = 0; j < 9; j ++) { 10 if (board[i][j] != '.') { 11 int k = board[i][j] - '1'; 12 if (row[i][k] > 0 || col[j][k] > 0 || cell[i/3][j/3][k] > 0) { 13 return false; 14 } 15 row[i][k] ++; 16 col[j][k] ++; 17 cell[i/3][j/3][k] ++; 18 } 19 } 20 } 21 return true; 22 }