Open MiaoRain opened 4 years ago
class Solution:
def largestValues(self, root: TreeNode) -> List[int]:
ans = []
if root is None:
return ans
queue = [root]
while queue:
ans.append(max(x.val for x in queue))
new_queue = []
for node in queue:
if node.left:
new_queue.append(node.left)
if node.right:
new_queue.append(node.right)
queue = new_queue
return ans
from collections import defaultdict
class Solution:
def ladderLength(self, beginWord: str, endWord: str, wordList: List[str]) -> int:
"""
defaultdict与普通dict的最大作用在于:
你可以直接call一个不存在的key, 如果不存在这个key,那就先直接创建这个key,并根据默认值的设置,赋值value,而后在继续操作。
省去了
dict[new] = dict.get(new, default = [])
然后才能使用dict[new]来进一步操作。
相比之下:你可放心大胆的用:defaultdict[new] 管他有没有。
"""
if endWord not in wordList or not endWord or not beginWord or not wordList:
return 0
L = len(beginWord)
all_combo_dict = defaultdict(list)
for word in wordList:
for i in range(len(beginWord)):
# Key is the generic word
# Value is a list of words which have the same intermediate generic word.
all_combo_dict[word[:i] + "*" + word[i+1:]].append(word)
#print(all_combo_dict)
queue = [(beginWord, 1)]
print(queue)
visited = {beginWord: True}
while queue:
current_word, level = queue.pop(0)
for i in range(L):
intermediate_word = current_word[:i] + "*" + current_word[i+1:]
for word in all_combo_dict[intermediate_word]:
if word == endWord:
return level + 1
if word not in visited:
visited[word] = True
queue.append((word, level + 1))
all_combo_dict[intermediate_word] = []
return 0
class Solution:
def dfs(self, grid, r, c):
grid[r][c] = 0
nr, nc = len(grid), len(grid[0])
for x, y in [(r - 1, c), (r + 1, c), (r, c - 1), (r, c + 1)]:
if 0 <= x < nr and 0 <= y < nc and grid[x][y] == "1":
self.dfs(grid, x, y)
def numIslands(self, grid: List[List[str]]) -> int:
nr = len(grid)
if nr == 0:
return 0
nc = len(grid[0])
num_islands = 0
for r in range(nr):
for c in range(nc):
if grid[r][c] == "1":
num_islands += 1
self.dfs(grid, r, c)
return num_islands