Skip to content

Commit e55a479

Browse files
committed
feat: add solutions to lc problem: No.0863,1704
* No.0863.All Nodes Distance K in Binary Tree * No.1704.Determine if String Halves Are Alike
1 parent dd9d1b0 commit e55a479

File tree

5 files changed

+95
-1
lines changed

5 files changed

+95
-1
lines changed

solution/0800-0899/0860.Lemonade Change/README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,12 @@
5353

5454
<!-- 这里可写通用的实现逻辑 -->
5555

56+
**方法一:贪心 + 模拟**
57+
58+
从前往后遍历账单数组 `bills`,如果当前账单是 5 美元,那么直接收下即可;如果当前账单是 10 美元,那么需要找零 5 美元;如果当前账单是 20 美元,那么需要找零 15 美元,此时有两种找零方式:找零 1 张 10 美元 + 1 张 5 美元;找零 3 张 5 美元。如果找零失败,直接返回 `false`
59+
60+
时间复杂度 $O(n)$,空间复杂度 $O(1)$。其中 $n$ 为账单数组 `bills` 的长度。
61+
5662
<!-- tabs:start -->
5763

5864
### **Python3**

solution/0800-0899/0863.All Nodes Distance K in Binary Tree/README.md

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,11 @@
5050

5151
<!-- 这里可写通用的实现逻辑 -->
5252

53-
先用哈希表存放每个节点的父节点,然后 DFS 找到距离目标节点 target 为 k 的节点即可。
53+
**方法一:DFS + 哈希表**
54+
55+
我们先用 DFS 遍历整棵树,记录每个结点的父结点,然后从目标结点开始,向上、向下分别搜索距离为 $k$ 的结点,添加到答案数组中。
56+
57+
时间复杂度 $O(n)$,空间复杂度 $O(n)$。其中 $n$ 是二叉树的结点数。
5458

5559
<!-- tabs:start -->
5660

@@ -97,6 +101,40 @@ class Solution:
97101
return ans
98102
```
99103

104+
```python
105+
# Definition for a binary tree node.
106+
# class TreeNode:
107+
# def __init__(self, x):
108+
# self.val = x
109+
# self.left = None
110+
# self.right = None
111+
112+
class Solution:
113+
def distanceK(self, root: TreeNode, target: TreeNode, k: int) -> List[int]:
114+
def dfs1(root, fa):
115+
if root is None:
116+
return
117+
p[root] = fa
118+
dfs1(root.left, root)
119+
dfs1(root.right, root)
120+
121+
def dfs2(root, fa, k):
122+
if root is None:
123+
return
124+
if k == 0:
125+
ans.append(root.val)
126+
return
127+
for nxt in (root.left, root.right, p[root]):
128+
if nxt != fa:
129+
dfs2(nxt, root, k - 1)
130+
131+
p = {}
132+
dfs1(root, None)
133+
ans = []
134+
dfs2(target, None, k)
135+
return ans
136+
```
137+
100138
### **Java**
101139

102140
<!-- 这里可写当前语言的特殊实现逻辑 -->

solution/0800-0899/0863.All Nodes Distance K in Binary Tree/README_EN.md

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,40 @@ class Solution:
8080
return ans
8181
```
8282

83+
```python
84+
# Definition for a binary tree node.
85+
# class TreeNode:
86+
# def __init__(self, x):
87+
# self.val = x
88+
# self.left = None
89+
# self.right = None
90+
91+
class Solution:
92+
def distanceK(self, root: TreeNode, target: TreeNode, k: int) -> List[int]:
93+
def dfs1(root, fa):
94+
if root is None:
95+
return
96+
p[root] = fa
97+
dfs1(root.left, root)
98+
dfs1(root.right, root)
99+
100+
def dfs2(root, fa, k):
101+
if root is None:
102+
return
103+
if k == 0:
104+
ans.append(root.val)
105+
return
106+
for nxt in (root.left, root.right, p[root]):
107+
if nxt != fa:
108+
dfs2(nxt, root, k - 1)
109+
110+
p = {}
111+
dfs1(root, None)
112+
ans = []
113+
dfs2(target, None, k)
114+
return ans
115+
```
116+
83117
### **Java**
84118

85119
```java

solution/1700-1799/1704.Determine if String Halves Are Alike/README.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,14 @@ class Solution:
6868
return cnt == 0
6969
```
7070

71+
```python
72+
class Solution:
73+
def halvesAreAlike(self, s: str) -> bool:
74+
vowels = set('aeiouAEIOU')
75+
a, b = s[:len(s) >> 1], s[len(s) >> 1:]
76+
return sum(c in vowels for c in a) == sum(c in vowels for c in b)
77+
```
78+
7179
### **Java**
7280

7381
<!-- 这里可写当前语言的特殊实现逻辑 -->

solution/1700-1799/1704.Determine if String Halves Are Alike/README_EN.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,14 @@ class Solution:
5454
return cnt == 0
5555
```
5656

57+
```python
58+
class Solution:
59+
def halvesAreAlike(self, s: str) -> bool:
60+
vowels = set('aeiouAEIOU')
61+
a, b = s[:len(s) >> 1], s[len(s) >> 1:]
62+
return sum(c in vowels for c in a) == sum(c in vowels for c in b)
63+
```
64+
5765
### **Java**
5866

5967
```java

0 commit comments

Comments
 (0)