0
点赞
收藏
分享

微信扫一扫

LeetCode: 36. Valid Sudoku


LeetCode: 36. Valid Sudoku

题目描述

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.

大意是说: 判断给定的矩阵是否满足每行、每列、每个3*3的小矩阵中没有重复的数字(1-9)。

解题思路

只需要用一个hash表记录每行每列每个小矩阵中出现过的 1-9即可。这里我用一个 int 的0-8位的值来表示数字1-9是否出现过, 当数字i出现时, 就将第i-1位标记为1。

LeetCode: 36. Valid Sudoku_hash表

AC源码

class Solution {
public:
bool isValidSudoku(vector<vector<char>>& board) {
int row[9] = {0};
int column[9] = {0};
int rect[9] = {0};

for(int i = 0; i < board.size(); ++i)
{
for(int j = 0; j < board[i].size(); ++j){
if(board[i][j] != '.')
{
int value = 1 << (board[i][j] - '0' - 1);
if(row[i] & value) return false;
else row[i] |= value;

if(column[j] & value) return false;
else column[j] |= value;

int rectIdx = i/3*3 + j/3;
if(rect[rectIdx]&value) return false;
else rect[rectIdx] |= value;
}
}
}
return true;
}
};


举报

相关推荐

0 条评论