LeetCode 36. Valid Sudoku

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.

这个题的难度在于找出board[i][j]位于哪个正方形

观察行号规律:

第0个九宫格:000111222; 第1个九宫格:000111222; 第2个九宫格:000111222;

第3个九宫格:333444555; 第4个九宫格:333444555; 第5个九宫格:333444555;

第6个九宫格:666777888; 第7个九宫格:666777888; 第8个九宫格:666777888;

可见对于每三个九宫格行号增3;对于单个九宫格,每三个格点行号增1。

因此第i个九宫格的第j个格点的行号可表示为i/3*3+j/3

 

观察列号规律:

第0个九宫格:012012012; 第1个九宫格:345345345; 第2个九宫格:678678678;

第3个九宫格:012012012; 第4个九宫格:345345345; 第5个九宫格:678678678;

第6个九宫格:012012012; 第7个九宫格:345345345; 第8个九宫格:678678678;

可见对于下个九宫格列号增3,循环周期为3;对于单个九宫格,每个格点行号增1,周期也为3。

周期的数学表示就是取模运算mod。

因此第i个九宫格的第j个格点的列号可表示为i%3*3+j%3

class Solution {
public:
        bool isValidSudoku(vector>& board) {
        int flag_1[9][9] = {0}, flag_2[9][9] = {0}, flag_3[9][9] = {0};
        for(int i = 0; i < board.size(); ++ i)
            for(int j = 0; j < board[i].size(); ++ j)
                if(board[i][j] != '.')
                {
                    int num = board[i][j] - '0' - 1, k = i / 3 * 3 + j / 3;
                    /*
                    if(flag_1[i][num] || flag_2[j][num] || flag_3[k][num])
                        return false;
                    flag_1[i][num] = flag_2[j][num] = flag_3[k][num] = 1;
                    */
                    if (flag_1[i][num] == 0)
                        flag_1[i][num] = 1;
                    else
                        return false;
                    if (flag_2[j][num] == 0)
                        flag_2[j][num] = 1;
                    else
                        return false;
                    if (flag_3[k][num] == 0)
                        flag_3[k][num] = 1;
                    else
                        return false;
                }
        
        return true;
    }
};


你可能感兴趣的:(LeetCode)