500
class Solution:
def findWords(self, words: List[str]) -> List[str]:
hash_map = '12210111011122000010020202'
ans = []
for word in words:
idx = hash_map[ord(word[0].lower()) - ord('a')]
if all(hash_map[ord(w.lower()) - ord('a')] == idx for w in word):
ans.append(word)
return ans
501
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def findMode(self, root: TreeNode) -> List[int]:
def dfs(n,res):
if n:
res[n.val] += 1
dfs(n.left,res)
dfs(n.right,res)
if not root:
return []
res = Counter()
dfs(root,res)
c = res.most_common()[0][1]
return [k for k,v in res.items() if v==c]
504
class Solution:
def convertToBase7(self, num: int) -> str:
if num == 0:
return '0'
ans = []
is_negative = '-' if num < 0 else ''
num = abs(num)
while num > 0:
num, remain = divmod(num,7)
ans.append(str(remain))
return is_negative + "".join(ans[::-1])
506
class Solution:
desc = ("Gold Medal", "Silver Medal", "Bronze Medal")
def findRelativeRanks(self, score: List[int]) -> List[str]:
ans = [""] * len(score)
arr = sorted(enumerate(score), key=lambda x: -x[1])
for i, (idx, _) in enumerate(arr):
ans[idx] = self.desc[i] if i < 3 else str(i + 1)
return ans
507
class Solution:
def checkPerfectNumber(self, num: int) -> bool:
if num == 1:
return False
sum = 1
d = 2
while d * d <= num:
if num % d == 0:
sum += d
if d * d < num:
sum += num / d
d += 1
return sum == num
509
class Solution:
def fib(self, n: int) -> int:
if n < 2:
return n
p, q, r = 0, 0, 1
for i in range(2, n + 1):
p, q = q, r
r = p + q
return r
520
class Solution:
def detectCapitalUse(self, word: str) -> bool:
# 若第 1 个字母为小写,则需额外判断第 2 个字母是否为小写
if len(word) >= 2 and word[0].islower() and word[1].isupper():
return False
# 无论第 1 个字母是否大写,其他字母必须与第 2 个字母的大小写相同
return all(word[i].islower() == word[1].islower() for i in range(2, len(word)))
521
class Solution:
def findLUSlength(self, a: str, b: str) -> int:
return max(len(a),len(b)) if a!=b else -1
530
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def getMinimumDifference(self, root: TreeNode) -> int:
self.arr =[]
def dfs(root):
if not root:return
dfs(root.left)
self.arr.append(root.val)
dfs(root.right)
dfs(root)
res = [self.arr[i+1] - self.arr[i] for i in range(len(self.arr)-1)]
return min(res) if res else 0
541
class Solution:
def reverseStr(self, s: str, k: int) -> str:
t = list(s)
for i in range(0, len(t), 2 * k):
t[i: i + k] = reversed(t[i: i + k])
return "".join(t)
543
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def diameterOfBinaryTree(self, root: TreeNode) -> int:
self.diameter = 0
self.dfs(root)
return self.diameter
def dfs(self,node):
if node == None:
return 0
left_height = self.dfs(node.left)
right_height = self.dfs(node.right)
self.diameter = max(self.diameter,left_height+right_height)
return max(left_height,right_height) + 1
551
class Solution:
def checkRecord(self, s: str) -> bool:
absents = lates = 0
for i, c in enumerate(s):
if c == "A":
absents += 1
if absents >= 2:
return False
if c == "L":
lates += 1
if lates >= 3:
return False
else:
lates = 0
return True
557
class Solution:
def reverseWords(self, s: str) -> str:
return ' '.join([i[::-1] for i in s.split(' ')])
559
"""
# Definition for a Node.
class Node:
def __init__(self, val=None, children=None):
self.val = val
self.children = children
"""
class Solution:
def maxDepth(self, root: 'Node') -> int:
if not root:return 0
depth = 0
for child in root.children:
depth = max(depth, self.maxDepth(child))
return 1 + depth
561
class Solution:
def arrayPairSum(self, nums: List[int]) -> int:
nums.sort()
return sum(nums[::2])
563
class Solution:
def __init__(self):
self.ans = 0
def findTilt(self, root: TreeNode) -> int:
self.dfs(root)
return self.ans
def dfs(self, node):
if not node:
return 0
sum_left = self.dfs(node.left)
sum_right = self.dfs(node.right)
self.ans += abs(sum_left - sum_right)
return sum_left + sum_right + node.val
566
class Solution:
def matrixReshape(self, nums: List[List[int]], r: int, c: int) -> List[List[int]]:
m, n = len(nums), len(nums[0])
if m * n != r * c:
return nums
ans = [[0] * c for _ in range(r)]
for x in range(m * n):
ans[x // c][x % c] = nums[x // n][x % n]
return ans
572
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def isSubtree(self, s, t):
"""
:type s: TreeNode
:type t: TreeNode
:rtype: bool
"""
if not s and not t:
return True
if not s or not t:
return False
return self.isSameTree(s, t) or self.isSubtree(s.left, t) or self.isSubtree(s.right, t)
def isSameTree(self, s, t):
if not s and not t:
return True
if not s or not t:
return False
return s.val == t.val and self.isSameTree(s.left, t.left) and self.isSameTree(s.right, t.right)
575
class Solution:
def distributeCandies(self, candyType: List[int]) -> int:
return min(len(set(candyType)), len(candyType) // 2)
589
"""
# Definition for a Node.
class Node:
def __init__(self, val=None, children=None):
self.val = val
self.children = children
"""
class Solution:
def preorder(self, root: 'Node') -> List[int]:
self.res = []
def dfs(node):
if not node:return
self.res.append(node.val)
for child in node.children:
#self.res.append(child.val)
dfs(child)
dfs(root)
return self.res
590
"""
# Definition for a Node.
class Node:
def __init__(self, val=None, children=None):
self.val = val
self.children = children
"""
class Solution:
def postorder(self, root: 'Node') -> List[int]:
self.res = []
def dfs(node):
if not node:return
for child in node.children:
#self.res.append(child.val)
dfs(child)
self.res.append(node.val)
dfs(root)
return self.res
594
class Solution:
def findLHS(self, nums: List[int]) -> int:
nums.sort()
res, begin = 0, 0
for end in range(len(nums)):
while nums[end] - nums[begin] > 1:
begin += 1
if nums[end] - nums[begin] == 1:
res = max(res, end - begin + 1)
return res
598
class Solution:
def maxCount(self, m: int, n: int, ops: List[List[int]]) -> int:
mina, minb = m, n
for a, b in ops:
mina = min(mina, a)
minb = min(minb, b)
return mina * minb
599
from collections import defaultdict
class Solution:
def findRestaurant(self, list1: List[str], list2: List[str]) -> List[str]:
res = defaultdict(list)
for char in set(list1) & set(list2):
res[list1.index(char) + list2.index(char)].append(char)
return sorted(res.items(),key=lambda x: x[0])[0][1]