LeetCode36——Valid Sudoku
题意:
判断数独是否符合,也就是每行,每列,每个3X3的九宫格。比起下一题完成数独,判断起来就简单多了:
思路就是,按行,按列,按3X3的九宫格分别判断,最后的结果是三者的与的结果,这样写起来代码量比较多但是思路还是比较清晰的。
代码:
class Solution {
private:
bool ValidRow(vector< vector<char> >&board)//对行判断
{
map<char, int>myMap;
for (int i = 0; i < 9; i++)
{
vector<char> oneRow(board[i]);//存储第i行数据
for (int j = 0; j < 9; j++)
{
if (oneRow[j] == '.')
continue;
else
{
if (myMap.find(oneRow[j]) != myMap.end())//如果出现同样的数字则立刻返回false
return false;
else
myMap[oneRow[j]] = 1;
}
}
myMap.clear();
oneRow.clear();
}
return true;
}
bool ValidCol(vector< vector<char> >&board)//对每列进行判断
{
map<char, int>myMap;
for (int i = 0; i < 9; i++)
{
vector<char>oneCol;
for (int j = 0; j < 9; j++)
{
oneCol.push_back(board[j][i]);//第i列
}
for (int k = 0; k < 9; k++)
{
if (oneCol[k] == '.')
continue;
else
{
if (myMap.find(oneCol[k]) != myMap.end())//如果有重复立刻返回
return false;
else
myMap[oneCol[k]] = 1;
}
}
myMap.clear();
oneCol.clear();
}
return true;
}
bool ValidMatrix(vector< vector<char> >&board)//判断每个3X3的九宫格
{
map<char, int>myMap;
vector<char>oneMatrix;
//九宫格按照从左往右从上往下的顺序
for (int k = 0; k < 9; k++)
{
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
oneMatrix.push_back(board[i + (k / 3) * 3][j + (k % 3) * 3]);
}
}
for (int l = 0; l < 9; l++)
{
if (oneMatrix[l] == '.')
continue;
else
{
if (myMap.find(oneMatrix[l]) != myMap.end())//出现重复数字立刻返回false
return false;
else
myMap[oneMatrix[l]] = 1;
}
}
oneMatrix.clear();
myMap.clear();
}
return true;
}
public:
bool isValidSudoku(vector<vector<char>>& board) {
return ValidCol(board) && ValidMatrix(board) && ValidRow(board);
}
};
本文介绍了一种通过检查行、列及3x3宫格来验证数独是否有效的算法实现。利用C++编程语言,通过map数据结构判断每行、每列及每个小宫格内的数字是否有重复。
7708

被折叠的 条评论
为什么被折叠?



