Valid Sudoku

来源:互联网 发布:电脑软件必备 编辑:程序博客网 时间:2024/04/29 18:05

https://oj.leetcode.com/problems/valid-sudoku/


1、题目要求:判断一个数独已给出数字部分是否有效(如果这个给出数独的每一行9个数没有重复的,每一列9个数也没有重复的,在9个3×3的方格里面9个数也没有重复,则说明此数独给出的数字是有效的。)

例:

这个数独是有效的。


2、解题思路:判断数独表是否有效,主要是看在每行,每列,每块中是否有重复的数字,我们可以将数独表中的每个已给出数字按关键码分别散列到3个hash table(9×9)中,首先初始化3个hash table所有元素为false,当散列一个元素的时候,就改为true,如果散列冲突(即出现数字重复的情况),则返回false。



class Solution {public:    bool isValidSudoku(vector<vector<char> > &board) {        vector<vector<bool>> rows(9, vector<bool>(9, false));   //初始化3个散列表中的元素都为false;        vector<vector<bool>> cols(9, vector<bool>(9, false));        vector<vector<bool>> blocks(9, vector<bool>(9, false));        for(int i=0; i!=9; i++)                                 //遍历数独表中的元素        {            for(int j=0; j!=9; j++)                             //遍历数独表中的元素            {                if(board[i][j]=='.')    continue;                int k= i- i%3 + j/3;                            //由i, j来确定board[i][j]在哪个块中                int num= board[i][j]- '1';                      //确定数独表中每个元素key(char型字符'1'-'9')散列到3个散列表中的位置(0-8);                if(rows[i][num]||cols[j][num]||blocks[k][num])                    return false;                rows[i][num]= cols[j][num]= blocks[k][num]= true;            }        }        return true;    }};




0 0
原创粉丝点击