题目大意:给你一个数独矩阵,判断是否为合法的数独矩阵。只需要检测每行,每列,每个子方格有没有重复的数字即可。
下面提供AC代码,代码有几点在面试的时候应该是要规避的!第一是函数功能分的不够细,判断行是否合法的函数应该只判断一行的数据是否合法,同样判断子方格的函数应该只判断一个子方格是否合法。其他的控制过程应该放在主函数中。这里为了简化编写过程就偷了懒了,其实是不对的。
class Solution {
public:
bool clon(vector<vector<char> > &board)
{
bool num[10];
for(int i=0;i<9;i++)
{
memset(num,false,sizeof(num));
for(int j=0;j<9;j++)
{
int pt=board[i][j]-'0';;
if(pt>0 && pt<10)
{
if(num[pt])return false;
num[pt]=true;
}
}
};
return true;
};
bool rown(vector<vector<char> > &board)
{
bool num[10];
for(int i=0;i<9;i++)
{
memset(num,false,sizeof(num));
for(int j=0;j<9;j++)
{
int pt=board[j][i]-'0';;
if(pt>0 && pt<10)
{
if(num[pt])return false;
num[pt]=true;
}
}
};
return true;
};
bool box(vector<vector<char> > &board)
{
bool num[10];
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
int x=i*3,y=j*3;
memset(num,false,sizeof(num));
for(int m=x;m<x+3;m++)
{
for(int n=y;n<y+3;n++)
{
int pt=board[m][n]-'0';
if(pt>0 && pt<10)
{
if(num[pt])return false;
num[pt]=true;
}
}
}
}
};
return true;
}
bool isValidSudoku(vector<vector<char> > &board) {
if(!clon(board))return false;
if(!rown(board))return false;
if(!box(board))return false;
return true;
}
};