LeetCode 第 36 题:有效的数独
2023-03-16 本文已影响0人
放开那个BUG
1、前言
图片.png2、思路
本题的思路主要是用数组记录每行,每列,box 中的数映射的位置是否已经存在过,必须各一个数组记录。至于第几个 box 为什么是 i / 3 + (j / 3) * 3,只需要带入 box 就行。
3、代码
class Solution {
public boolean isValidSudoku(char[][] board) {
int m = board.length, n = board[0].length;
boolean[][] rowMemo = new boolean[m][n];
boolean[][] columnMemo = new boolean[m][n];
boolean[][] boxMemo = new boolean[m][n];
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
if(board[i][j] == '.'){
continue;
}
int num = board[i][j] - '0';
if(rowMemo[i][num - 1] || columnMemo[j][num - 1]){
return false;
}
rowMemo[i][num - 1] = true;
columnMemo[j][num - 1] = true;
// index 是第几个 box
int index = i / 3 + (j / 3) * 3;
if(boxMemo[index][num - 1]){
return false;
}
boxMemo[index][num - 1] = true;
}
}
return true;
}
}