Skip to content

Commit 7e8deb0

Browse files
Merge pull request #110 from hhf666feng/master
第二周作业#26
2 parents caad7fd + f03b553 commit 7e8deb0

29 files changed

+2087
-2
lines changed

Week_01/id_26/LeetCode_15_26.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ def threeSum(self, nums):
33
"""
44
:type nums: List[int]
55
:rtype: List[List[int]]
6+
思路:
7+
1) 防止重复结果,所以先排序,遍历时跳过相邻的重复值
8+
2) 二分查找,大于0则右测向左移动,小于0则左边向右移动
69
"""
710
nums.sort()
811
ret, n = [], len(nums)

Week_01/id_26/LeetCode_26_26.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@ def removeDuplicates(self, nums):
66
"""
77
k = 1
88
for n in nums:
9-
if n != nums[k-1]:
9+
if n != nums[k - 1]:
1010
nums[k] = n
1111
k += 1
1212
return k
13-

Week_02/id_26/LeetCode_101_26.py

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
#
2+
# @lc app=leetcode.cn id=101 lang=python
3+
#
4+
# [101] 对称二叉树
5+
#
6+
# https://leetcode-cn.com/problems/symmetric-tree/description/
7+
#
8+
# algorithms
9+
# Easy (46.65%)
10+
# Likes: 351
11+
# Dislikes: 0
12+
# Total Accepted: 34.7K
13+
# Total Submissions: 74.4K
14+
# Testcase Example: '[1,2,2,3,4,4,3]'
15+
#
16+
# 给定一个二叉树,检查它是否是镜像对称的。
17+
#
18+
# 例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
19+
#
20+
# ⁠ 1
21+
# ⁠ / \
22+
# ⁠ 2 2
23+
# ⁠/ \ / \
24+
# 3 4 4 3
25+
#
26+
#
27+
# 但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:
28+
#
29+
# ⁠ 1
30+
# ⁠ / \
31+
# ⁠ 2 2
32+
# ⁠ \ \
33+
# ⁠ 3 3
34+
#
35+
#
36+
# 说明:
37+
#
38+
# 如果你可以运用递归和迭代两种方法解决这个问题,会很加分。
39+
#
40+
#
41+
# Definition for a binary tree node.
42+
# class TreeNode(object):
43+
# def __init__(self, x):
44+
# self.val = x
45+
# self.left = None
46+
# self.right = None
47+
48+
49+
class Solution(object):
50+
def isSymmetric(self, root):
51+
"""
52+
:type root: TreeNode
53+
:rtype: bool
54+
"""
55+
56+
def _isSymmetric(node1, node2):
57+
if not node1 and not node2:
58+
return True
59+
if not node1 or not node2:
60+
return False
61+
if node1.val != node2.val:
62+
return False
63+
return _isSymmetric(node1.left, node2.right) and _isSymmetric(
64+
node1.right, node2.left)
65+
66+
return _isSymmetric(root, root)

Week_02/id_26/LeetCode_102_26.py

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
#
2+
# @lc app=leetcode.cn id=102 lang=python
3+
#
4+
# [102] 二叉树的层次遍历
5+
#
6+
# https://leetcode-cn.com/problems/binary-tree-level-order-traversal/description/
7+
#
8+
# algorithms
9+
# Medium (56.47%)
10+
# Likes: 213
11+
# Dislikes: 0
12+
# Total Accepted: 28.4K
13+
# Total Submissions: 50.2K
14+
# Testcase Example: '[3,9,20,null,null,15,7]'
15+
#
16+
# 给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。
17+
#
18+
# 例如:
19+
# 给定二叉树: [3,9,20,null,null,15,7],
20+
#
21+
# ⁠ 3
22+
# ⁠ / \
23+
# ⁠ 9 20
24+
# ⁠ / \
25+
# ⁠ 15 7
26+
#
27+
#
28+
# 返回其层次遍历结果:
29+
#
30+
# [
31+
# ⁠ [3],
32+
# ⁠ [9,20],
33+
# ⁠ [15,7]
34+
# ]
35+
#
36+
#
37+
#
38+
# Definition for a binary tree node.
39+
# class TreeNode(object):
40+
# def __init__(self, x):
41+
# self.val = x
42+
# self.left = None
43+
# self.right = None
44+
45+
46+
class Solution(object):
47+
def levelOrder(self, root):
48+
"""
49+
:type root: TreeNode
50+
:rtype: List[List[int]]
51+
"""
52+
if not root:
53+
return []
54+
ret, layer = [], [root]
55+
while layer:
56+
tmp_layer, line = [], []
57+
for i in layer:
58+
line.append(i.val)
59+
if i.left:
60+
tmp_layer.append(i.left)
61+
if i.right:
62+
tmp_layer.append(i.right)
63+
layer = tmp_layer
64+
ret.append(line)
65+
return ret

Week_02/id_26/LeetCode_103_26.py

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
#
2+
# @lc app=leetcode.cn id=103 lang=python
3+
#
4+
# [103] 二叉树的锯齿形层次遍历
5+
#
6+
# https://leetcode-cn.com/problems/binary-tree-zigzag-level-order-traversal/description/
7+
#
8+
# algorithms
9+
# Medium (49.74%)
10+
# Likes: 64
11+
# Dislikes: 0
12+
# Total Accepted: 11.7K
13+
# Total Submissions: 23.5K
14+
# Testcase Example: '[3,9,20,null,null,15,7]'
15+
#
16+
# 给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
17+
#
18+
# 例如:
19+
# 给定二叉树 [3,9,20,null,null,15,7],
20+
#
21+
# ⁠ 3
22+
# ⁠ / \
23+
# ⁠ 9 20
24+
# ⁠ / \
25+
# ⁠ 15 7
26+
#
27+
#
28+
# 返回锯齿形层次遍历如下:
29+
#
30+
# [
31+
# ⁠ [3],
32+
# ⁠ [20,9],
33+
# ⁠ [15,7]
34+
# ]
35+
#
36+
#
37+
#
38+
# Definition for a binary tree node.
39+
# class TreeNode(object):
40+
# def __init__(self, x):
41+
# self.val = x
42+
# self.left = None
43+
# self.right = None
44+
45+
46+
class Solution(object):
47+
def zigzagLevelOrder(self, root):
48+
"""
49+
思路:层序遍历,每隔一层换一个方向遍历
50+
:type root: TreeNode
51+
:rtype: List[List[int]]
52+
"""
53+
if not root:
54+
return []
55+
line, ret, rot = [root], [], 1
56+
while line:
57+
tmp1, tmp2 = [], []
58+
for i in line:
59+
if i.left:
60+
tmp1.append(i.left)
61+
if i.right:
62+
tmp1.append(i.right)
63+
for j in line[::rot]:
64+
tmp2.append(j.val)
65+
ret.append(tmp2)
66+
line = tmp1
67+
rot *= -1
68+
return ret

Week_02/id_26/LeetCode_111_26.py

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
#
2+
# @lc app=leetcode.cn id=111 lang=python
3+
#
4+
# [111] 二叉树的最小深度
5+
#
6+
# https://leetcode-cn.com/problems/minimum-depth-of-binary-tree/description/
7+
#
8+
# algorithms
9+
# Easy (38.70%)
10+
# Likes: 125
11+
# Dislikes: 0
12+
# Total Accepted: 19K
13+
# Total Submissions: 49K
14+
# Testcase Example: '[3,9,20,null,null,15,7]'
15+
#
16+
# 给定一个二叉树,找出其最小深度。
17+
#
18+
# 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
19+
#
20+
# 说明: 叶子节点是指没有子节点的节点。
21+
#
22+
# 示例:
23+
#
24+
# 给定二叉树 [3,9,20,null,null,15,7],
25+
#
26+
# ⁠ 3
27+
# ⁠ / \
28+
# ⁠ 9 20
29+
# ⁠ / \
30+
# ⁠ 15 7
31+
#
32+
# 返回它的最小深度  2.
33+
#
34+
#
35+
# Definition for a binary tree node.
36+
# class TreeNode(object):
37+
# def __init__(self, x):
38+
# self.val = x
39+
# self.left = None
40+
# self.right = None
41+
42+
43+
class Solution(object):
44+
def minDepth(self, root):
45+
"""
46+
:type root: TreeNode
47+
:rtype: int
48+
"""
49+
if not root:
50+
return 0
51+
left = self.minDepth(root.left)
52+
right = self.minDepth(root.right)
53+
if not left or not right:
54+
return 1 + left + right
55+
return 1 + min(left, right)

Week_02/id_26/LeetCode_1_26.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
#
2+
# @lc app=leetcode.cn id=1 lang=python
3+
#
4+
# [1] 两数之和
5+
#
6+
# https://leetcode-cn.com/problems/two-sum/description/
7+
#
8+
# algorithms
9+
# Easy (46.10%)
10+
# Likes: 5365
11+
# Dislikes: 0
12+
# Total Accepted: 397.2K
13+
# Total Submissions: 861.4K
14+
# Testcase Example: '[2,7,11,15]\n9'
15+
#
16+
# 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
17+
#
18+
# 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
19+
#
20+
# 示例:
21+
#
22+
# 给定 nums = [2, 7, 11, 15], target = 9
23+
#
24+
# 因为 nums[0] + nums[1] = 2 + 7 = 9
25+
# 所以返回 [0, 1]
26+
#
27+
#
28+
#
29+
30+
31+
class Solution(object):
32+
def twoSum(self, nums, target):
33+
"""
34+
:type nums: List[int]
35+
:type target: int
36+
:rtype: List[int]
37+
"""
38+
s = {}
39+
for i in range(len(nums)):
40+
tmp = target - nums[i]
41+
if tmp in s:
42+
return [s[tmp], i]
43+
s[nums[i]] = i

0 commit comments

Comments
 (0)