https://leetcode.com/problems/valid-sudoku/
class Solution {public:bool isValidSudoku(vector<vector<char>>& board) {int sub_r, sub_c;for(int r = 0; r < 9; r++){for(int c = 0; c < 9; c++){if(isdigit(board[r][c])){for(int r_o = 0; r_o < 9; r_o++){if(board[r_o][c] == board[r][c] && r_o != r){return false;}}for(int c_o = 0; c_o < 9; c_o++){if(board[r][c_o] == board[r][c] && c_o != c){return false;}}if(r <= 2){sub_r = 0;} else if(r >= 3 && r <= 5){sub_r = 1;} else {sub_r = 2;}if(c <= 2){sub_c = 0;} else if(c >= 3 && c <= 5){sub_c = 1;} else {sub_c = 2;}for(int r_s = 3*sub_r; r_s < 3*(sub_r + 1); r_s++){for(int c_s = 3*sub_c; c_s < 3*(sub_c + 1); c_s++){if(board[r_s][c_s] == board[r][c] && !(r_s == r && c_s == c)){return false;}}}}}}return true;}};
func isValidSudoku(board [][]byte) bool {
for y:=0; y<9; y++ {
for x:=0; x<9; x++ {
if !allValid(board, y, x){
return false
}
}
}
return true
}
func verticalValid(board [][]byte, y int, x int) bool {
val := board[y][x]
for i:=0; i<9; i++ {
if board[i][x] == val && i != y {
return false
}
}
return true
}
func horizontalValid(board [][]byte, y int, x int) bool {
val := board[y][x]
for j:=0; j<9; j++ {
if board[y][j] == val && j != x {
return false
}
}
return true
}
func cubeValid(board [][]byte, y int, x int) bool {
val := board[y][x]
i_o := int(y / 3) * 3
j_o := int(x / 3) * 3
for i:=i_o; i < i_o + 3; i++ {
for j:=j_o; j < j_o + 3; j++ {
if board[i][j] == val && !(j == x && i == y) {
return false
}
}
}
return true
}
func allValid(board [][]byte, y int, x int) bool {
if board[y][x] == '.' {
return true
}
if !verticalValid(board, y, x){
return false
}
if !horizontalValid(board, y, x){
return false
}
if !cubeValid(board, y, x){
return false
}
return true
}
