有效数独

问题描述

   判断一个 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     }
原文地址:https://www.cnblogs.com/dogeLife/p/11016989.html