美文网首页
Leetcode 36. Valid Sudoku

Leetcode 36. Valid Sudoku

作者: persistent100 | 来源:发表于2017-04-24 11:47 被阅读0次

    题目

    Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules.
    The Sudoku board could be partially filled, where empty cells are filled with the character '.'.


    A partially filled sudoku which is valid.

    Note:A valid Sudoku board (partially filled) is not necessarily solvable. Only the filled cells need to be validated.

    分析

    就是需要判断9个横行,9个竖行,和9个方框没有重复的数字。当然一个一个判断是可以,但是可以找到其中的规律,具体参考代码。

    bool isValidSudoku(char** board, int boardRowSize, int boardColSize) {
        bool answer=true;
        int temp[10]={0};
        //判断横行
        for(int i=0;i<9;i++)
        {
            for(int k=0;k<10;k++)
                temp[k]=0;
            for(int j=0;j<9;j++)
            {
                if(board[i][j]!='.')
                {
                    if(temp[board[i][j]-'0']==0)
                    {
                        temp[board[i][j]-'0']=1;
                    }
                    else
                    {
                        answer=false;break;
                    }
                }
            }
        }
        //判断竖行
        for(int i=0;i<9;i++)
        {
            for(int k=0;k<10;k++)
                temp[k]=0;
            for(int j=0;j<9;j++)
            {
                if(board[j][i]!='.')
                {
                    if(temp[board[j][i]-'0']==0)
                    {
                        temp[board[j][i]-'0']=1;
                    }
                    else
                    {
                        answer=false;break;
                    }
                }
            }
        }
        //9个方框
        for(int i=0;i<3;i++)
        {
            for(int j=0;j<3;j++)
            {
                for(int k=0;k<10;k++)
                    temp[k]=0;
                int left[9] ={0+3*i,0+3*i,0+3*i,1+3*i,1+3*i,1+3*i,2+3*i,2+3*i,2+3*i};
                int right[9]={0+3*j,1+3*j,2+3*j,0+3*j,1+3*j,2+3*j,0+3*j,1+3*j,2+3*j};
                for(int k=0;k<9;k++)
                {
                    if(board[left[k]][right[k]]!='.')
                    {
                        if(temp[board[left[k]][right[k]]-'0']==0)
                        {
                            temp[board[left[k]][right[k]]-'0']=1;
                        }
                        else
                        {
                            answer=false;break;
                        }
                    }
                }
            }
        }
        return answer;
    }
    

    相关文章

      网友评论

          本文标题:Leetcode 36. Valid Sudoku

          本文链接:https://www.haomeiwen.com/subject/jaauzttx.html