难度:中等
解题思路:根据题目给的条件一个一个判断,先判断行,再判断列,最后再判断3*3矩阵,唯一出乎我意料的是,时间上竟然超过了70%用户,因为我用了许多循环进行判断,代码如下:
class Solution {
public boolean isValidSudoku(char[][] board) {
//数字 1-9 在每一行只能出现一次。
for (int i = 0; i < 9; i++) {
ArrayList<Character> list = new ArrayList<>();
for (int j = 0; j < 9; j++) {
if ('.' == board[i][j]) ;
else if ('1' <= board[i][j] && board[i][j] <= '9'
&& !list.contains(board[i][j])){
list.add(board[i][j]);
}else {
return false;
}
}
}
//数字 1-9 在每一列只能出现一次。
for (int i = 0; i < 9; i++) {
ArrayList<Character> list = new ArrayList<>();
for (int j = 0; j < 9; j++) {
if ('.' == board[j][i]) ;
else if ('1' <= board[j][i] && board[j][i] <= '9'
&& !list.contains(board[j][i])){
list.add(board[j][i]);
}else {
return false;
}
}
}
//数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。
int a = 0;
int b = 0;
while (a != 9){
ArrayList<Character> list = new ArrayList<>();
for (int i = a; i < a+3; i++) {
for (int j = b; j < b+3; j++) {
if ('.' == board[i][j]) ;
else if ('1' <= board[i][j] && board[i][j] <= '9'
&& !list.contains(board[i][j])){
list.add(board[i][j]);
}else {
return false;
}
}
}
b += 3; //以列的形式进行3X3的判断
if (b == 9){ //列走到底在进行行的增加,然后重置列
a += 3;
b = 0;
}
}
return true;
}
}
|