LeetCode 36. Valid Sudoku

来源:互联网 发布:linux make命令安装 编辑:程序博客网 时间:2024/06/05 00:56

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<vector<char>>& 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;    }};


原创粉丝点击