36. Valid Sudoku
Determine if a 9x9 Sudoku board is valid. Only the filled cells need to be validated according to the following rules:
- Each row must contain the digits
1-9
without repetition. - Each column must contain the digits
1-9
without repetition. - Each of the 9
3x3
sub-boxes of the grid must contain the digits1-9
without repetition.
A partially filled sudoku which is valid.
The Sudoku board could be partially filled, where empty cells are filled with the character '.'
.
Example 1:
Input: [ ["5","3",".",".","7",".",".",".","."], ["6",".",".","1","9","5",".",".","."], [".","9","8",".",".",".",".","6","."], ["8",".",".",".","6",".",".",".","3"], ["4",".",".","8",".","3",".",".","1"], ["7",".",".",".","2",".",".",".","6"], [".","6",".",".",".",".","2","8","."], [".",".",".","4","1","9",".",".","5"], [".",".",".",".","8",".",".","7","9"] ] Output: true
Example 2:
Input: [ ["8","3",".",".","7",".",".",".","."], ["6",".",".","1","9","5",".",".","."], [".","9","8",".",".",".",".","6","."], ["8",".",".",".","6",".",".",".","3"], ["4",".",".","8",".","3",".",".","1"], ["7",".",".",".","2",".",".",".","6"], [".","6",".",".",".",".","2","8","."], [".",".",".","4","1","9",".",".","5"], [".",".",".",".","8",".",".","7","9"] ] Output: false Explanation: Same as Example 1, except with the 5 in the top left corner being modified to 8. Since there are two 8's in the top left 3x3 sub-box, it is invalid.
Note:
- A Sudoku board (partially filled) could be valid but is not necessarily solvable.
- Only the filled cells need to be validated according to the mentioned rules.
- The given board contain only digits
1-9
and the character'.'
. - The given board size is always
9x9
.
1 class Solution { 2 public: 3 bool isValidSudoku(vector<vector<char>>& board) 4 { 5 for(int i = 0;i<9;i++)//rows 6 { 7 set<char> myset; 8 for(int j = 0;j<9;j++){ 9 if(board[i][j] == '.') continue; 10 if(myset.find(board[i][j])==myset.end()) 11 myset.insert(board[i][j]); 12 else 13 return false; 14 } 15 } 16 17 for(int i = 0;i<9;i++)//cols 18 { 19 set<char> myset; 20 for(int j = 0;j<9;j++){ 21 if(board[j][i] == '.') continue; 22 if(myset.find(board[j][i])==myset.end()) 23 myset.insert(board[j][i]); 24 else 25 return false; 26 } 27 } 28 29 for(int sub_i = 0;sub_i < 3;sub_i++)//sub-box 30 for(int sub_j = 0 ;sub_j < 3; sub_j++) 31 { 32 set<char> myset; 33 for(int i = 0;i<3;i++) 34 for(int j =0;j<3;j++) 35 { 36 37 if(board[sub_i*3+i][sub_j*3+j] == '.') continue; 38 if(myset.find(board[sub_i*3+i][sub_j*3+j])==myset.end()) 39 myset.insert(board[sub_i*3+i][sub_j*3+j]); 40 else 41 return false; 42 } 43 } 44 45 return true; 46 47 } 48 49 };