LeetCode训练36:有效的数独

匿名 (未验证) 提交于 2019-12-02 23:59:01

判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。

数字 1-9 在每一行只能出现一次。
数字 1-9 在每一列只能出现一次。
数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。


上图是一个部分填充的有效的数独。

数独部分空格内已填入了数字,空白格用 '.' 表示。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-sudoku
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

1.

class Solution:     def isValidSudoku(self, board: List[List[str]]) -> bool:         remain = []         for i in range(9):             remain.clear()             for j in range(9):                 if board[i][j] == '.':                     continue                 if board[i][j] not in remain:                     remain.append(board[i][j])                 else:                     return False         for i in range(9):             remain.clear()             for j in range(9):                 if board[j][i] == '.':                     continue                 if board[j][i] not in remain:                     remain.append(board[j][i])                 else:                     return False         for x in range(0,9,3):             for y in range(0,9,3):                 remain.clear()                 for i in range(3):                     for j in range(3):                         if board[x+i][y+j] == '.':                             continue                         if board[x+i][y+j] not in remain:                             remain.append(board[x+i][y+j])                         else:                             return False         return True                                          

 2.

class Solution:     def isValidSudoku(self, board: list) -> bool:         remain1 = []         remain2 = []         remain3 = []         for a in range(9):             remain3.append([])         for i in range(9):             remain1.clear()             remain2.clear()             for j in range(9):                 if board[i][j] != '.':                     if board[i][j] in remain1:                         return False                     else:remain1.append(board[i][j])                     if board[i][j] in remain3[(i//3)*3+(j//3)]:                         return False                     else:remain3[(i//3)*3+(j//3)].append(board[i][j])                 if board[j][i] != '.':                     if board[j][i] in remain2:                         return False                     else:remain2.append(board[j][i])         return True

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!