一、问题描述
二、解题思路
代码如下(示例):
class Solution {
public boolean isValidSudoku(char[][] board) {
//第一个9代表行号数,第二个9代表具体的数值
int[][] rows = new int[9][9];
//第一个9代表列数,第二个9代表具体的数值
int[][] lines = new int[9][9];
//前2个3代表具体的九宫格,最后一个9代表具体的数值
int[][][] boxs = new int[3][3][9];
//将所有的数据遍历一次
for (int i =0;i<9;i++){
for(int j=0;j<9;j++){
char c = board[i][j];
if (c!='.'){
//因为最大索引为8,数值范围为0~9,所有0索引存1,1索引存2,以此类推
int index = c - '0' -1;
//对一行数字个数的数量进行判断
rows[i][index]++;
//对一列数字个数的数量进行判断
lines[j][index]++;
//对一个九宫格数字个数的数量进行判断
boxs[i/3][j/3][index]++;
//不同的条件下有相同的数值则返回false
if (rows[i][index]>1 || lines[j][index]>1 || boxs[i/3][j/3][index]>1){
return false;
}
}
}
}
return true;
}
}
测试结果: