https://leetcode-cn.com/problems/valid-sudoku/
# -*- coding:utf-8 -*-
class Solution(object):
def isValidSudoku(self, board):
"""
:type board: List[List[str]]
:rtype: bool
"""
# 检查横排
for i in range(9):
flag = ['1', '2', '3', '4', '5', '6', '7', '8', '9']
for j in range(9):
if board[i][j] is not '.':
if board[i][j] in flag:
flag.remove(board[i][j])
else:
return False
# 检查竖排
for i in range(9):
flag = ['1', '2', '3', '4', '5', '6', '7', '8', '9']
for j in range(9):
if board[j][i] is not '.':
if board[j][i] in flag:
flag.remove(board[j][i])
else:
return False
# 检查3*3
for i in range(0, 9, 3):
for j in range(0, 9, 3):
flag = ['1', '2', '3', '4', '5', '6', '7', '8', '9']
for x in range(i, i + 3):
for y in range(j, j + 3):
if board[x][y] is not '.':
if board[x][y] in flag:
flag.remove(board[x][y])
else:
return False
return True
if __name__ == '__main__':
board = [["5", "3", ".", ".", "7", ".", ".", ".", "."], ["6", ".", ".", "1", "9", "5", ".", ".", "."],
[".", "9", "8", ".", ".", ".", ".", "6", "."], ["8", ".", ".", ".", "6", ".", ".", ".", "3"],
["4", ".", ".", "8", ".", "3", ".", ".", "1"], ["7", ".", ".", ".", "2", ".", ".", ".", "6"],
[".", "6", ".", ".", ".", ".", "2", "8", "."], [".", ".", ".", "4", "1", "9", ".", ".", "5"],
[".", ".", ".", ".", "8", ".", ".", "7", "9"]]
print(Solution().isValidSudoku(board))
思路:查,就硬查,查三次。
依次遍历横排、竖排。如果出现就将flag中对应数字删去,如果不为空并且flag中没有则判为重复出现返回Flase。
0 条评论