36. 有效的数独
1. 题目
请你判断一个 9 x 9
的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。
- 数字
1-9
在每一行只能出现一次。 - 数字
1-9
在每一列只能出现一次。 - 数字
1-9
在每一个以粗实线分隔的3x3
宫内只能出现一次。(请参考示例图)
注意:
- 一个有效的数独(部分已被填充)不一定是可解的。
- 只需要根据以上规则,验证已经填入的数字是否有效即可。
- 空白格用
'.'
表示。
示例 1:
1 | 输入:board = |
示例 2:
1 | 输入:board = |
提示:
board.length == 9
board[i].length == 9
board[i][j]
是一位数字(1-9
)或者'.'
2. 思路
- 本质上需要对行和列以及9*9的小矩阵进行检验,因此整体思路按照3条规则划分成3个方法
- 对行和对列进行查重采用的是传统的暴力手段配合着哈希表完成
- 对小矩阵的查重判断比较费心思,需要按矩阵进行检查,因此首先对矩阵按照0-8进行排号,根据矩阵好计算出初始单元格坐标和结束单元格坐标,每个小矩阵的行和列步增最多都为2,再配合哈希表进行去重,按照矩阵进行编号如下所示:
- 小矩阵起始坐标计算公式为:
- 行:
(矩阵号 / 3) * 3
- 列:
(矩阵号 % 3) * 3
- 行:
3. 代码
1 | class Solution { |
4. 复杂度
- 时间复杂度:O(1)
- 空间复杂度:O(1)