Valid Sudoku :from LeetCode

来源:互联网 发布:人之无情乃可至于是乎 编辑:程序博客网 时间:2024/05/17 05:11

题目大意:给你一个数独矩阵,判断是否为合法的数独矩阵。只需要检测每行,每列,每个子方格有没有重复的数字即可。

下面提供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;    }};


0 0
原创粉丝点击