题目:leetcode 36.Valid Sudoku
地址:https://leetcode.com/problems/valid-sudoku/#/description
原题:
Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules.
The Sudoku board could be partially filled, where empty cells are filled with the character '.'
.
A partially filled sudoku which is valid.
Note:
A valid Sudoku board (partially filled) is not necessarily solvable. Only the filled cells need to be validated.
解题思路:
改题目非常简单,是为了下一题数独高级题做准备的基础题。我们只需要搞清楚数独的基本限制条件就可以解答该题。首先:行、列里面都要出现1~9的数字,并且不能重复;其次:每个九宫格内也存在同样的要求。该题给出的数据结构是按行存储的列表形式,解题时我们需要自行构建列的数据,以及九宫格的数据,这里是该题最大难点。然后判断是否有重复数字,有则返回false,最后全部检查完毕都符合要求的话就返回true
代码:
class Solution(object):
def isValidSudoku(self, board):
"""
:type board: List[List[str]]
:rtype: bool
"""
col_list = [[] for i in range(9)]
box_list = [[] for i in range(9)]
for i in range(0, len(board)):
temp_cont = []
if not self.judge(board[i]):
return False
for j in range(0, len(board[i])):
col_list[j].append(board[i][j])
box_list[(i / 3) * 3 + (j / 3)].append(board[i][j])
for i in range(0, len(col_list)):
if not self.judge(col_list[i]) or not self.judge(box_list[i]):
return False
return True
def judge(self, ll):
temp_cont = []
for i in range(0, len(ll)):
if ll[i] != '.':
temp_cont.append(int(ll[i]))
if len(temp_cont) != len(set(temp_cont)):
return False
else:
return True