Задача.
Определить, является ли корректным заполнение доски Судоку размером 9×9. Проверять нужно только заполненные клетки по следующим правилам:
- Каждая строка должна содержать цифры от 1 до 9 без повторений.
- Каждый столбец должен содержать цифры от 1 до 9 без повторений.
- Каждый из девяти блоков размером 3×3 должен содержать цифры от 1 до 9 без повторений.
Ссылка на leetcode: https://leetcode.com/problems/valid-sudoku
Решение.
Решение описал тут: 36. Valid Sudoku.
Код решение:
public boolean isValidSudoku(char[][] board) {
int rows[] = new int[9];
int cols[] = new int[9];
int squares[][] = new int[3][3];
for (int i = 0; i < board.length; i++) {
for (int j = 0; j < board[i].length; j++) {
if (board[i][j] == '.') {
continue;
}
if (board[i][j] < '1' || board[i][j] > '9') {
return false;
}
int index = board[i][j] - '0' - 1;
int value = 1 << index;
if ((rows[i] & value) > 0) {
return false;
}
rows[i] |= value;
if ((cols[j] & value) > 0) {
return false;
}
cols[j] |= value;
if ((squares[i/3][j/3] & value) > 0) {
return false;
}
squares[i/3][j/3] |= value;
}
}
return true;
}