/*
- Valid Sudoku My Submissions QuestionEditorial Solution
Total Accepted: 71051 Total Submissions: 233215 Difficulty: Easy
Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules.
The Sudoku board could be partially filled, where empty cells are filled with the character ‘.’.
A partially filled sudoku which is valid.
Note:
A valid Sudoku board (partially filled) is not necessarily solvable. Only the filled cells need to be validated.
Subscribe to see which companies asked this question
*/
/*
解题思路:
数独:同行同列都不能有重复数字,在3*3的方阵中也不能有重复数字,只要这三条都满足则这个数独状态就是正确的。
用三个二维数组分别来标记着三个条件。行和列都好说,就是小方阵那个条件稍微有点难度cellNum[i][j] ,i代表是第几个小方块,j代表是数字。初始化状态都为0,若是下次这个数字再重复出现则返回false。
*/
class Solution {
public:
bool isValidSudoku(vector<vector<char>>& board) {
//判断给出的数独盘面是否合理
int row=board.size(),col=board[0].size();
vector<vector<int>> rowNum(row,vector<int>(col,0));
vector<vector<int>> colNum(col,vector<int>(row,0));
vector<vector<int>> cellNum(row,vector<int>(col,0));
//遍历并判断
for(int i=0;i<row;i++){
for(int j=0;j<col;j++){
if(board[i][j]=='.')continue;
int index=board[i][j]-'1';
if(rowNum[i][index]==1 || colNum[j][index]==1 || cellNum[i/3*3+j/3][index]==1)return false;
rowNum[i][index]=1;
colNum[j][index]=1;
cellNum[i/3*3+j/3][index]=1;
}
}
return true;
}
};