Leetcode 36. Valid Sudoku

2017-04-24  本文已影响0人  persistent100

题目

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;
}
上一篇下一篇

猜你喜欢

热点阅读