Valid Sudoku

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值