1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
class Solution
{
public:
bool isValidSudoku(vector<vector<char>>& board)
{
std::vector<bool> st(9); // 标记数组,记录数字是否出现
// 1. 检查每一行
for (int i = 0; i < 9; ++i)
{
st = std::vector<bool>(9, false); // 重置标记
for (int j = 0; j < 9; ++j)
{
if (board[i][j] != '.')
{
int num = board[i][j] - '1'; // 映射到 0~8
if (st[num]) // 数字重复
return false;
st[num] = true; // 标记出现过
}
}
}
// 2. 检查每一列
for (int i = 0; i < 9; ++i)
{
st = std::vector<bool>(9, false); // 重置标记
for (int j = 0; j < 9; ++j)
{
if (board[j][i] != '.')
{
int num = board[j][i] - '1';
if (st[num]) // 数字重复
return false;
st[num] = true;
}
}
}
// 3. 检查每个 3×3 宫格
for (int i = 0; i < 9; i += 3)
for (int j = 0; j < 9; j += 3)
{
st = std::vector<bool>(9, false); // 重置标记
for (int x = 0; x < 3; ++x)
for (int y = 0; y < 3; ++y)
{
if (board[i + x][j + y] != '.')
{
int num = board[i + x][j + y] - '1';
if (st[num]) // 数字重复
return false;
st[num] = true;
}
}
}
return true; // 所有检查通过
}
};
|