没想到简单粗暴的遍历还可以超过95%的提交,惊讶
把验证行和验证列写到一起了,减少点循环用一个同样的二维数组存储第i行的数字占用情况
写的时候居然突然搞混了break和continue的用法,有辱师门啊[[[[
问题链接:https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/1/array/30/
public boolean isValidSudoku(char[][] board) {
boolean res=true;
if (!isValidRowAndCol(board)||!isValidBox(board)){
res=false;
}
return res;
}
public boolean isValidRowAndCol(char[][] board){
int[][] countCol = new int[board.length+1][board[0].length+1];
for(int i = 0;i<board.length;i++){
int[] countRow = new int[board[i].length+1];
for(int j = 0;j<board[0].length;j++){
if(board[i][j]=='.'){
continue;
}else{
if('0'<=board[i][j]&&board[i][j]<='9') {
board[i][j] -= '0';
}
countRow[board[i][j]]++;
countCol[j][board[i][j]]++;
if (countRow[board[i][j]]>1||countCol[j][board[i][j]]>1){
return false;
}
}
}
}
return true;
}
public boolean isValidBox(char[][] board){
for(int i=0;i<board.length;i+=3){
for (int j = 0;j<board[0].length;j+=3){
int[] a = new int[board.length+1];
for (int k = 0;k<=2;k++){
for (int m = 0;m<=2;m++){
if(board[i+k][j+m]!='.'){
if('0'<=board[i+k][j+m]&&board[i+k][j+m]<='9') {
board[i+k][j+m]-='0';
}
a[board[i+k][j+m]]++;
if(a[board[i+k][j+m]]>1){
return false;
}
}
}
}
}
}
return true;
}