Skip to content

Commit 8bba6c5

Browse files
authored
Add files via upload
1 parent b9f62f7 commit 8bba6c5

File tree

4 files changed

+123
-0
lines changed

4 files changed

+123
-0
lines changed

leetcode2/1020.飞地的数量.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# 从四条边上为 1 的位置向内搜索,将相连的 1 都改为 0,剩下的都是没有连接到边界的 1,计算1的个数所求数量
2+
class Solution(object):
3+
def numEnclaves(self, A):
4+
d = [(0, 1), (0, -1), (-1, 0), (1, 0)]
5+
m, n = len(A), len(A[0])
6+
7+
def dfs(x, y):
8+
A[x][y] = 0
9+
for dx, dy in d:
10+
nx, ny = x + dx, y + dy
11+
if 0 <= nx < m and 0 <= ny < n and A[nx][ny] == 1:
12+
dfs(nx, ny)
13+
14+
for i in range(m):
15+
for j in range(n):
16+
if (i == 0 or i == m - 1 or j == 0 or j == n - 1) and A[i][j] == 1:
17+
dfs(i, j)
18+
19+
res = 0
20+
for i in range(m):
21+
res += sum(A[i])
22+
return res

leetcode2/1079.活字印刷.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# 用集合存放所有可能的字符长度的全排列
2+
from itertools import permutations
3+
class Solution(object):
4+
def numTilePossibilities(self, tiles):
5+
res = set()
6+
for item_len in range(1, len(tiles)+1):
7+
for item in permutations(tiles, item_len):
8+
res.add(item)
9+
return len(res)
10+
11+
12+
# 回溯法,组合所有可能的字符串
13+
class Solution(object):
14+
def numTilePossibilities(self, tiles):
15+
res = set()
16+
17+
def genrate(output, tiles):
18+
if output:
19+
res.add(output)
20+
for i in range(len(tiles)):
21+
genrate(output + tiles[i], tiles[:i] + tiles[i+1:])
22+
23+
genrate('', tiles)
24+
return len(res)
25+
26+
27+
# 回溯法,记录字母个数
28+
class Solution(object):
29+
def numTilePossibilities(self, tiles):
30+
def dfs(counter):
31+
res = 0
32+
for i in range(26):
33+
if not counter[i]:
34+
continue
35+
res += 1
36+
counter[i] -= 1
37+
res += dfs(counter)
38+
counter[i] += 1
39+
return res
40+
41+
counter = [0]*26
42+
for i in tiles:
43+
counter[ord(i) - ord('A')] += 1
44+
return dfs(counter)
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
class TreeNode(object):
2+
def __init__(self, x):
3+
self.val = x
4+
self.left = None
5+
self.right = None
6+
7+
8+
class Solution(object):
9+
# 方法返回当前节点是否要删除
10+
def dfs(self, node, sums, limit):
11+
# 递归终止条件
12+
if not node.left and not node.right:
13+
return node.val + sums < limit
14+
# 默认左右子树都需要删除,后面如果左右节点为空时才能处理
15+
l_tree_del, r_tree_del = True, True
16+
# 递归判断左右子树是否需要删除
17+
if node.left:
18+
l_tree_del = self.dfs(node.left, node.val + sums, limit)
19+
if node.right:
20+
r_tree_del = self.dfs(node.right, node.val + sums, limit)
21+
# 需要删除则置位空
22+
if l_tree_del:
23+
node.left = None
24+
if r_tree_del:
25+
node.right = None
26+
# 左右子树都需要删除时,当前节点就需要删除
27+
return l_tree_del and r_tree_del
28+
29+
def sufficientSubset(self, root, limit):
30+
root_del = self.dfs(root, 0, limit)
31+
if root_del:
32+
return None
33+
return root
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
class TreeNode(object):
2+
def __init__(self, x):
3+
self.val = x
4+
self.left = None
5+
self.right = None
6+
7+
8+
# 深度优先搜索,从下往上计算深度,比较左右子树的深度,最近公共祖先的左右子树等高
9+
class Solution(object):
10+
def lcaDeepestLeaves(self, root):
11+
def dfs(root):
12+
if not root:
13+
return None, 0
14+
l_node, l_depth = dfs(root.left)
15+
r_node, r_depth = dfs(root.right)
16+
if l_depth > r_depth:
17+
return l_node, l_depth + 1
18+
elif l_depth < r_depth:
19+
return r_node, r_depth + 1
20+
else:
21+
return root, l_depth + 1
22+
23+
node, _ = dfs(root)
24+
return node

0 commit comments

Comments
 (0)