第5天。🤐 周日下午为什么比周五下午感觉还要累。 心累💔
Leetcode 36 Valid Sudoku
(Medium Level)
class Solution:
def isValidSudoku(self, board: List[List[str]]) -> bool:
return self.is_row_valid(board) and self.is_clo_valid(board) and self.is_square_valid(board)
def is_valid(self,unit):
unit = [i for i in unit if i != '.']
return len(set(unit)) == len(unit)
def is_row_valid(self,board):
for row in board:
if not self.is_valid(row):
return False
return True
def is_clo_valid(self,board):
for col in zip(*board):
if not self.is_valid(col):
return False
return True
def is_square_valid(self,board):
for i in (0,3,6):
for j in (0,3,6):
square = [board[x][y] for x in range(i,i+3) for y in range(j,j+3)]
if not self.is_valid(square):
return False
return True
按顺序暴力解的,也没想到有什么更好的办法。看到有国外大神只用了5行写完收工…距离产生的不止是美,还有实实在在的距离🤯🤯🤯🤯
Leetcode 125. Valid Palindrome
(Easy Level)
class Solution:
def isPalindrome(self, s: str) -> bool:
left, right = 0, len(s)-1
while left < right:
while left < right and not s[left].isalnum():
left +=1
while left < right and not s[right].isalnum():
right +=1
if s[left].lower() != s[right].lower():
return False
left +=1
right -=1
return True
这个是最简单想到的写法,不是好的解法。只是记录自己第一遍写的代码,这样第二遍可以对比一。我觉得用ASCII比较锁定区间可能是他想要的方法。也可以用正则来做,但需要引外库可能过不了leetcode,吧。
Leetcode 387. First Unique Character in a String
(Easy Level)
class Solution:
def firstUniqChar(self, s: str) -> int:
for i,x in enumerate(s):
#检查当前字母之前和之后有无相同字母
if x not in s[i+1:] and x not in s[:i]:
return i
return -1
开始想的是用collection中的counter方法来做,但乐儿他从的不让import,最终选择了切片,貌似不是最好的方法,是最大众的方法。双指针也可以