[LeetCode] 36. Valid Sudoku

来源:互联网 发布:金山恢复数据恢复软件 编辑:程序博客网 时间:2024/06/05 17:25

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.


问题描述:


确定一个Sudoku是否是有效的。

一个Sudoku是一个9 x 9的方格,又被分成9个3 x 3的方格。

具体的规则为

a) 每行上只能出现1-9之间的数字,并且每个数字至多被使用一次。但是可以选择不填,如若不填,则以’.‘表示。 

b) 每列上同理

c) 每个3 x 3方格内同理


思路核心:

// 总共有9行,每行允许出现的数字总共9个。
// 每当我们处理一个元素的时候,RowAlreadyExist[该元素所在的行][该元素] = True;表明在该行上该元素已经使用过了。

// 列的情况类似
// 对于3x3的中方格,我们从左到右、从上到下,依次给每个中方格编号,0,1, ..., 8
// 具体换算公式为k = i / 3 * 3 + j / 3;

    bool isValidSudoku(vector<vector<char>>& board) {        bool RowAlreadyExist[9][9] = {false},             ColAlreadyExist[9][9] = {false}, 
             SubBoxAlreadyExist[9][9] = {false};
         for (int i = 0; i < board.size(); i++) {            for (int j = 0; j < board[i].size(); j++) {                if (board[i][j] == '.')                    continue;                                int num = board[i][j] - '1';                int k = i / 3 * 3 + j / 3;                                if (RowAlreadyExist[i][num] || ColAlreadyExist[j][num] || SubBoxAlreadyExist[k][num])                    return false;                RowAlreadyExist[i][num] = ColAlreadyExist[j][num] = SubBoxAlreadyExist[k][num] = true;            }        }                return true;    }





原创粉丝点击