请判定一个数独是否有效。
该数独可能只填充了部分数字,其中缺少的数字用 .
表示。
背完这套刷题模板,真的不一样!
北大计院令狐冲15年刷题经验总结《算法小抄模板Cheat Sheet》助你上岸!
微信添加【jiuzhang15】备注【Cheat Sheet】领取
一个合法的数独(仅部分填充)并不一定是可解的。我们仅需使填充的空格有效即可。
什么是 数独
?
样例
样例1:
输入:
["53..7....","6..195...",".98....6.","8...6...3","4..8.3..1","7...2...6",".6....28.","...419..5","....8..79"]
输出: true
样例说明:
这个数独如下图所示,他是合法的。
样例 2:
输入:
["53..75...","6..195...",".98....6.","8...6...3","4..8.3..1","7...2...6",".6....28.","...419..5","....8..79"]
输出: false
样例说明:
这个数独如下图所示。他是不合法的因为他的第一行和第六列有两个5。
bool isValidSudoku(vector<string> &board)
{
//行
vector<vector<bool>> rowVec(9, vector<bool>(9, false));
//列
vector<vector<bool>> colVec(9, vector<bool>(9, false));
//自身
vector<bool>vec11(9, false);
vector<bool>vec12(9, false);
vector<bool>vec13(9, false);
vector<bool>vec21(9, false);
vector<bool>vec22(9, false);
vector<bool>vec23(9, false);
vector<bool>vec31(9, false);
vector<bool>vec32(9, false);
vector<bool>vec33(9, false);
for (int row = 0; row < 9; row++)
{
for (int col = 0; col < 9; col++)
{
if ('.' == board[row][col])
{
continue;
}
int num = board[row][col] - '0'-1;
//按行检查
if (true == rowVec[row][num])
{
return false;
}
else
{
rowVec[row][num] = true;
}
//按列检查
if (true == colVec[col][num])
{
return false;
}
else
{
colVec[col][num] = true;
}
//按自身检查
if (row <= 2)
{
if (col <= 2)
{
if (true == vec11[num])
{
return false;
}
else
{
vec11[num] = true;
}
}
else if (2 < col && col <= 5)
{
if (true == vec12[num])
{
return false;
}
else
{
vec12[num] = true;
}
}
else if (5 < col && col <= 8)
{
if (true == vec13[num])
{
return false;
}
else
{
vec13[num] = true;
}
}
}
else if (row > 2 && row <= 5)
{
if (col <= 2)
{
if (true == vec21[num])
{
return false;
}
else
{
vec21[num] = true;
}
}
else if (2 < col && col <= 5)
{
if (true == vec22[num])
{
return false;
}
else
{
vec22[num] = true;
}
}
else if (5 < col && col <= 8)
{
if (true == vec23[num])
{
return false;
}
else
{
vec23[num] = true;
}
}
}
else if (row > 5 && row <= 8)
{
if (col <= 2)
{
if (true == vec31[num])
{
return false;
}
else
{
vec31[num] = true;
}
}
else if (2 < col && col <= 5)
{
if (true == vec32[num])
{
return false;
}
else
{
vec32[num] = true;
}
}
else if (5 < col && col <= 8)
{
if (true == vec33[num])
{
return false;
}
else
{
vec33[num] = true;
}
}
}
}
}
return true;
}