LeetCode | 36. Valid Sudoku

来源:互联网 发布:apache jmeter 中文版 编辑:程序博客网 时间:2024/05/22 03:23

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.

思路:判断每一行,每一列,每一个块里面是否有重复数字即可。行与列一起判断可以更快一些,16ms->15ms。
注:判重用 set 集合比较方便。

class Solution {public:    bool isValidSudoku(vector<vector<char>>& board) {        set<char> s;    //使用 set 方便查重        set<char> s2;        //对每一行和每一列检查        for(int i=0;i<9;i++)        {            s.clear();            s2.clear();            for(int j=0;j<9;j++)            {                //每一行                if(board[i][j]>='0' && board[i][j]<='9')                {                    if(s.find(board[i][j]) != s.end())                        return false;       //有重合                    s.insert(board[i][j]);                }                //每一列                if(board[j][i]>='0' && board[j][i]<='9')                {                    if(s2.find(board[j][i]) != s2.end())                        return false;       //有重合                    s2.insert(board[j][i]);                }            }        }        //对每个块进行检查        for(int i=0;i<7;i+=3)        {            for(int j=0;j<7;j+=3)            {                s.clear();                for(int row=i;row<i+3;row++)                {                    for(int col=j;col<j+3;col++)                    {                        if(board[row][col]>='0' && board[row][col]<='9')                        {                            if(s.find(board[row][col]) != s.end())                                return false;       //有重合                            s.insert(board[row][col]);                        }                                            }                }            }        }        return true;    }};