题目: 请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。
- 数字 1-9 在每一行只能出现一次。
- 数字 1-9 在每一列只能出现一次。
- 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图)
注意:
- 一个有效的数独(部分已被填充)不一定是可解的。
- 只需要根据以上规则,验证已经填入的数字是否有效即可。
- 空白格用 '.' 表示。
示例1:
示例2:
提示:
board.length == 9
board[i].length == 9
board[i][j]
是一位数字(1-9
)或者'.'
题目分析:行、列、块各一个二维数组记录情况,块的数字为box_num=r//3*3+c//3
class Solution(object):
def isValidSudoku(self, board: List[List[str]]) -> bool:
rows=[{} for i in range(9)]
columns=[{} for i in range(9)]
boxes=[{} for i in range(9)]
for r in range (9):
for c in range(9):
num=board[r][c]
if num!='.':
num=int(num)
box_num=r//3*3+c//3
rows[r][num]=rows[r].get(num,0)+1
columns[c][num]=columns[c].get(num,0)+1
boxes[box_num][num]=boxes[box_num].get(num,0)+1
if rows[r][num]>1:
return False
if columns[c][num]>1:
return False
if boxes[box_num][num]>1:
return False
return True
题目来源:
作者:力扣 (LeetCode)
链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/x2f9gg/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。