Leecode 36
思路:
最简单暴力方法,三次便利,按行,按列,按小块。另外一种方法,一次便利,用三个hash表记录分别记录行、列、块。然后看如果出现的次数多于一次,那么返回false。
代码://貌似有点问题
bool Leecode36_isValidSudoku(std::vector<std::vector<char>>& board) {
std::vector<std::map<int, int>> rows;
std::vector<std::map<int, int>> columns;
std::vector<std::map<int, int>> boxes;
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
char nums = board[i][j];
if (nums != '.') {
int num = nums - '0';
int box_index = (i / 3) * 3 + j / 3;
bool flag = false;
rows[i].count(num) > 0 ? flag = true : rows[i][num] = 1;
columns[j].count(num) > 0 ? flag = true : columns[j][num] = 1;
boxes[box_index].count(num) > 0 ? flag = true : boxes[box_index][num] = 1;
if (flag)
return false;