leetcode python 36. 有效的数独 73. 矩阵置零
36. 有效的数独
请你判断一个9x9
的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。
- 数字
1-9
在每一行只能出现一次。 - 数字
1-9
在每一列只能出现一次。 - 数字
1-9
在每一个以粗实线分隔的3x3
宫内只能出现一次。(请参考示例图)
数独部分空格内已填入了数字,空白格用'.'
表示。
注意:
- 一个有效的数独(部分已被填充)不一定是可解的。
- 只需要根据以上规则,验证已经填入的数字是否有效即可。
示例 1:
不怂,直接刚!要啥算法🤡
class Solution:
def have_same(self, res):
tmp = []
for i in res:
if i in tmp and i != '.':
return True
else:
tmp.append(i)
return False
def isValidSudoku(self, board: List[List[str]]) -> bool:
for i in board:
if self.have_same(i) is True:
return False
tmp = []
for j in range(9):
for i in board:
tmp.append(i[j])
if self.have_same(tmp):
return False
tmp = []
res = []
for i in range(3):
for j in range(3):
res.append(board[i][j])
if self.have_same(res):
return False
res = []
for i in range(3):
for j in range(3, 6):
res.append(board[i][j])
if self.have_same(res):
return False
res = []
for i in range(3):
for j in range(6, 9):
res.append(board[i][j])
if self.have_same(res):
return False
res = []
for i in range(3, 6):
for j in range(3):
res.append(board[i][j])
if self.have_same(res):
return False
res = []
for i in range(3, 6):
for j in range(3, 6):
res.append(board[i][j])
if self.have_same(res):
return False
res = []
for i in range(3, 6):
for j in range(6, 9):
res.append(board[i][j])
if self.have_same(res):
return False
res = []
for i in range(6, 9):
for j in range(3):
res.append(board[i][j])
if self.have_same(res):
return False
res = []
for i in range(6, 9):
for j in range(3, 6):
res.append(board[i][j])
if self.have_same(res):
return False
res = []
for i in range(6, 9):
for j in range(6, 9):
res.append(board[i][j])
if self.have_same(res):
return False
return True
执行用时:40 ms, 在所有 Python3 提交中击败了79.31%的用户
内存消耗:15.1 MB, 在所有 Python3 提交中击败了12.93%的用户
靠居然挺快的?占点内存而已怕个屁🤬
73. 矩阵置零
给定一个m x n
的矩阵,如果一个元素为0,则将其所在行和列的所有元素都设为0。请使用原地
算法。
进阶:
- 一个直观的解决方案是使用
O(mn)
的额外空间,但这并不是一个好的解决方案。 - 一个简单的改进方案是使用
O(m + n)
的额外空间,但这仍然不是最好的解决方案。 - 你能想出一个仅使用常量空间的解决方案吗?
示例 1:
输入:matrix = [[1,1,1],[1,0,1],[1,1,1]]
输出:[[1,0,1],[0,0,0],[1,0,1]]
class Solution:
def setZeroes(self, matrix: List[List[int]]) -> None:
m, n = len(matrix), len(matrix[0])
row, col = [False] * m, [False] * n
for i in range(m):
for j in range(n):
if matrix[i][j] == 0:
row[i] = col[j] = True
for i in range(m):
for j in range(n):
if row[i] or col[j]:
matrix[i][j] = 0
执行用时:32 ms, 在所有 Python3 提交中击败了95.64%的用户
内存消耗:15.1 MB, 在所有 Python3 提交中击败了82.93%的用户
我是辣鸡😥