模拟
方法1
public boolean isValidSudoku(char[][] board) {
int R = board.length, C = board[0].length;
int[] rows = new int[R + 1], cols = new int[C + 1], blocks = new int[10];
for (int r = 0; r < R; r++) {
for (int c = 0; c < C; c++) {
char cur = board[r][c];
if (cur == '.') continue;
int t = cur - '0';
int idx = r / 3 * 3 + c / 3;
if (((rows[r] >> t) & 1) == 1 || ((cols[c] >> t) & 1) == 1 || ((blocks[idx] >> t) & 1) == 1)
return false;
rows[r] |= (1 << t);
cols[c] |= (1 << t);
blocks[idx] |= (1 << t);
}
}
return true;
}另外一种写法
方法2
方法1:模拟+库函数
每次模拟一次翻转,判断是否相同
方法2:翻转点
按翻转点的下标索引计算
方法3:一行

方法1
方法2
方法3
方法4
Last updated