凌云的博客

成功=工作+游戏+少说空话

LeetCode 算法题 36. Valid Sudoku

分类:algorithm| 发布时间:2016-09-27 15:23:00


题目

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 '.'

Note:

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

题意

判断给出的数独是否是合法的。

数独的基本规则是同一行,同一列以及同一个 3x3 的块不能有重复的数字。

注意:

不需要检查数独是否是可解的。只需要判断已填充的部分是否是合法的。

解法

解法相当简单,只需要根据规则判断每行,每列以及每块是否有重复的数字即可。

class Solution {
public:
    bool isValidSudoku(vector<vector<char>>& board) {
        int col[9][9] = {0}, row[9][9] = {0}, rec[9][9] = {0};

        for(int i = 0; i < 9; ++ i) {
            for(int j = 0; j < 9; ++ j) {
                if(board[i][j] != '.') {
                    int num = board[i][j] - '0' - 1, k = i / 3 * 3 + j / 3;

                    if(col[i][num] || row[j][num] || rec[k][num])
                        return false;

                    col[i][num] = row[j][num] = rec[k][num] = 1;
                }
            }
        }

        return true;
    }
};