【LeetCode36】有效的数独(哈希表)

简介: 【LeetCode36】有效的数独(哈希表)

一、题目

二、思路

从左往右,从上往下遍历给定的二维数组board,然后遍历到当前元素board[i][j]时,需要判断是否满足题目的3个条件,这里可以分别用3个哈希表实现:

  • 在第 i 个行中是否出现过:使用row[9][10],注意第二维度是装的数字,即哈希表的key为数字(1-9范围内),value为是否出现过,出现过则为1(此时就直接返回false了),没出现过即保持为0(事后要置为1)。
  • 在第 j 个列中是否出现过:使用col[9][10]
  • 在第 j/3 + (i/3)*3个box中是否出现过:使用box[9][10]

因为宫格里的数字是1~9范围内,我们可以直接用数组实现哈希表,此时数组大小就设为10了,因为下标从0开始。

三、代码

class Solution {
public:
    bool isValidSudoku(vector<vector<char>>& board) {
        //存储每一行的每一个数是否都出现过
        int row[9][10] = {0};
        int col[9][10] = {0};
        //存储每一个box的每个数是否出现过
        int box[9][10] = {0};
        for(int i = 0; i < 9; i++){
            for(int j = 0; j < 9; j++){
                if(board[i][j] == '.') continue;
                int num_temp = board[i][j] - '0';
                //哈希表,判断该数是否在所在的行出现过
                if(row[i][num_temp]) return false;
                if(col[j][num_temp]) return false;
                if(box[j/3 + (i / 3) * 3][num_temp]) return false;
                //现在出现了,对应哈希表的value要置为1
                row[i][num_temp] = 1;
                col[j][num_temp] = 1;
                box[j/3 + (i / 3) * 3][num_temp] = 1;
            }
        }
        return true;
    }
};


相关文章
|
6月前
|
存储
LeetCode刷题---817. 链表组件(哈希表)
LeetCode刷题---817. 链表组件(哈希表)
|
6月前
力扣面试经典题之哈希表
力扣面试经典题之哈希表
39 0
|
6月前
|
存储 算法 程序员
【Leetcode 程序员面试金典 01.01】判定字符是否唯一 —— 位运算|哈希表
可以使用哈希表或位运算来解决此问题:由题可知s[i]仅包含小写字母,int[26]即能表示字符的出现次数;
|
6月前
|
Java
leetcode-37:解数独
leetcode-37:解数独
47 0
|
5月前
|
索引
力扣随机一题 6/26 哈希表 数组 思维
力扣随机一题 6/26 哈希表 数组 思维
38 0
|
1月前
|
存储 算法 C++
Leetcode第三十六题(有效的数独)
这篇文章介绍了如何使用C++编写一个算法来验证一个9x9数独是否有效,遵循数独的规则,即数字1-9在每一行、每一列和每个3x3宫内只能出现一次。
42 0
|
3月前
|
存储 算法 索引
LeetCode第36题有效的数独
这篇文章介绍了LeetCode第36题"有效的数独"的解题方法,通过使用三个二维数组分别记录每一行、每一列以及每个3x3宫格内1-9数字出现的次数,来验证给定数独是否有效。
|
5月前
力扣随机一题 哈希表 排序 数组
力扣随机一题 哈希表 排序 数组
32 1
|
5月前
|
存储 算法 Python
二刷力扣--哈希表
二刷力扣--哈希表
|
5月前
|
存储 算法 数据可视化
深入解析力扣160题:相交链表的解决方法(哈希表法与双指针法详细图解)
深入解析力扣160题:相交链表的解决方法(哈希表法与双指针法详细图解)