Skip to content

Commit e72f238

Browse files
Merge pull request #6 from hhf666feng/master
第一周作业#26
2 parents de4e361 + 69afbcd commit e72f238

22 files changed

+570
-0
lines changed

Week_01/id_26/LeetCode_101_26.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# Definition for a binary tree node.
2+
class TreeNode(object):
3+
def __init__(self, x):
4+
self.val = x
5+
self.left = None
6+
self.right = None
7+
8+
9+
class Solution(object):
10+
def isSymmetric(self, root):
11+
"""
12+
:type root: TreeNode
13+
:rtype: bool
14+
"""
15+
16+
def _isSymmetric(node1, node2):
17+
if not node1 and not node2:
18+
return True
19+
if not node1 or not node2:
20+
return False
21+
if not node1.val == node2.val:
22+
return False
23+
return _isSymmetric(node1.left, node2.right) and _isSymmetric(
24+
node1.right, node2.left)
25+
26+
return _isSymmetric(root, root)

Week_01/id_26/LeetCode_1021_26.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
class Solution(object):
2+
def removeOuterParentheses(self, S):
3+
"""
4+
:type S: str
5+
:rtype: str
6+
"""
7+
if not S:
8+
return S
9+
ret, t = '', 0
10+
for i in S:
11+
if i == '(':
12+
t += 1
13+
if t > 1:
14+
ret += i
15+
if i == ')':
16+
t -= 1
17+
if t > 0:
18+
ret += i
19+
return ret
20+
21+
22+
print Solution().removeDuplicates('(()())(())')
23+
print Solution().removeDuplicates('(()())(())(()(()))')

Week_01/id_26/LeetCode_1047_26.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
class Solution(object):
2+
def removeDuplicates(self, S):
3+
"""
4+
:type S: str
5+
:rtype: str
6+
"""
7+
if not S:
8+
return S
9+
stack = []
10+
for i in S:
11+
if not stack:
12+
stack.append(i)
13+
continue
14+
if stack[-1] == i:
15+
stack.pop()
16+
else:
17+
stack.append(i)
18+
return ''.join(stack)
19+
20+
21+
# print Solution().removeDuplicates('adcc')

Week_01/id_26/LeetCode_104_26.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# Definition for a binary tree node.
2+
class TreeNode(object):
3+
def __init__(self, x):
4+
self.val = x
5+
self.left = None
6+
self.right = None
7+
8+
9+
class Solution(object):
10+
def maxDepth(self, root):
11+
"""
12+
:type root: TreeNode
13+
:rtype: int
14+
"""
15+
if not root:
16+
return 0
17+
return 1 + max(self.maxDepth(root.left), self.maxDepth(root.right))

Week_01/id_26/LeetCode_111_26.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Definition for a binary tree node.
2+
# class TreeNode(object):
3+
# def __init__(self, x):
4+
# self.val = x
5+
# self.left = None
6+
# self.right = None
7+
8+
9+
class Solution(object):
10+
def minDepth(self, root):
11+
"""
12+
:type root: TreeNode
13+
:rtype: int
14+
"""
15+
if not root:
16+
return 0
17+
left = self.minDepth(root.left)
18+
right = self.minDepth(root.right)
19+
if left and right:
20+
return 1 + min(left, right)
21+
return 1 + left + right

Week_01/id_26/LeetCode_15_26.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
class Solution(object):
2+
def threeSum(self, nums):
3+
"""
4+
:type nums: List[int]
5+
:rtype: List[List[int]]
6+
"""
7+
nums.sort()
8+
ret, n = [], len(nums)
9+
for i in range(n):
10+
if i > 0 and nums[i] == nums[i - 1]:
11+
continue
12+
left = i + 1
13+
right = n - 1
14+
while left < right:
15+
tmp = nums[i] + nums[left] + nums[right]
16+
if tmp == 0:
17+
s = [nums[i], nums[left], nums[right]]
18+
ret.append(s)
19+
while left < right and nums[left] == nums[left + 1]:
20+
left += 1
21+
while left < right and nums[right] == nums[right - 1]:
22+
right -= 1
23+
right -= 1
24+
left += 1
25+
elif tmp > 0:
26+
right -= 1
27+
else:
28+
left += 1
29+
return ret

Week_01/id_26/LeetCode_174_26.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#!/usr/bin/python
2+
# -*-coding:utf-8 -*-
3+
4+
5+
class Solution(object):
6+
def calculateMinimumHP(self, dungeon):
7+
"""
8+
:type dungeon: List[List[int]]
9+
:rtype: int
10+
"""
11+
m = len(dungeon)
12+
n = len(dungeon[0])
13+
dp = [[1 << 31] * (n + 1) for _ in range(m + 1)]
14+
dp[m][n - 1], dp[m - 1][n] = 1, 1
15+
for i in range(m - 1, -1, -1):
16+
for j in range(n - 1, -1, -1):
17+
dp[i][j] = min(dp[i + 1][j], dp[i][j + 1]) - dungeon[i][j]
18+
if dp[i][j] <= 0:
19+
dp[i][j] = 1
20+
return dp[0][0]
21+
22+
23+
print Solution().calculateMinimumHP([[-2, -3, 3], [-5, -10, 1], [10, 30, -5]])

Week_01/id_26/LeetCode_189_26.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
class Solution(object):
2+
def rotate(self, nums, k):
3+
"""
4+
:type nums: List[int]
5+
:type k: int
6+
:rtype: None Do not return anything, modify nums in-place instead.
7+
"""
8+
if not nums:
9+
return []
10+
k = k % len(nums)
11+
12+
def reverse(start, end):
13+
while end > start:
14+
nums[start], nums[end] = nums[end], nums[start]
15+
start += 1
16+
end -= 1
17+
18+
reverse(0, len(nums) - 1)
19+
reverse(0, k - 1)
20+
reverse(k, len(nums) - 1)
21+
return nums
22+
23+
24+
print(Solution().rotate([1, 2, 3, 4, 5, 6, 7], 3))
25+
print(Solution().rotate([], 4))
26+
print(Solution().rotate([-1], 2))
27+
print(Solution().rotate([1, 2, 3, 4, 5, 6], 2))

Week_01/id_26/LeetCode_21_26.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# Definition for singly-linked list.
2+
class ListNode(object):
3+
def __init__(self, x):
4+
self.val = x
5+
self.next = None
6+
7+
8+
class Solution(object):
9+
def mergeTwoLists(self, l1, l2):
10+
"""
11+
:type l1: ListNode
12+
:type l2: ListNode
13+
:rtype: ListNode
14+
"""
15+
s = ListNode(0)
16+
k = s
17+
while l1 is not None or l2 is not None:
18+
if l1 is None:
19+
s.next = l2
20+
l2 = None
21+
elif l2 is None:
22+
s.next = l1
23+
l1 = None
24+
elif l1.val <= l2.val:
25+
s.next = ListNode(l1.val)
26+
l1 = l1.next
27+
else:
28+
s.next = ListNode(l2.val)
29+
l2 = l2.next
30+
s = s.next
31+
return k.next

Week_01/id_26/LeetCode_236_26.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# Definition for a binary tree node.
2+
class TreeNode(object):
3+
def __init__(self, x):
4+
self.val = x
5+
self.left = None
6+
self.right = None
7+
8+
9+
class Solution(object):
10+
def lowestCommonAncestor(self, root, p, q):
11+
"""
12+
:type root: TreeNode
13+
:type p: TreeNode
14+
:type q: TreeNode
15+
:rtype: TreeNode
16+
"""
17+
if not root:
18+
return root
19+
if root == p or root == q:
20+
return root
21+
left = self.lowestCommonAncestor(root.left, p, q)
22+
right = self.lowestCommonAncestor(root.right, p, q)
23+
if left is None:
24+
return right
25+
if right is None:
26+
return left
27+
return root

Week_01/id_26/LeetCode_242_26.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
class Solution(object):
2+
def isAnagram(self, s, t):
3+
"""
4+
:type s: str
5+
:type t: str
6+
:rtype: bool
7+
"""
8+
if len(s) != len(t):
9+
return False
10+
m = {}
11+
for i in s:
12+
if m.get(i) is None:
13+
m[i] = 1
14+
else:
15+
m[i] += 1
16+
for i in t:
17+
if m.get(i) is None:
18+
return False
19+
else:
20+
m[i] -= 1
21+
for i in m.values():
22+
if not i == 0:
23+
return False
24+
return True

Week_01/id_26/LeetCode_24_26.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# Definition for singly-linked list.
2+
class ListNode(object):
3+
def __init__(self, x):
4+
self.val = x
5+
self.next = None
6+
7+
8+
class Solution(object):
9+
def swapPairs(self, head):
10+
"""
11+
:type head: ListNode
12+
:rtype: ListNode
13+
"""
14+
if head is None:
15+
return
16+
if head.next is None:
17+
return head
18+
ret = ListNode(0)
19+
p = ret
20+
while head:
21+
if head.next:
22+
p.next = head.next
23+
head.next = head.next.next
24+
p.next.next = head
25+
p = p.next.next
26+
head = head.next
27+
else:
28+
head = head.next
29+
return ret.next

Week_01/id_26/LeetCode_257_26.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# Definition for a binary tree node.
2+
# class TreeNode(object):
3+
# def __init__(self, x):
4+
# self.val = x
5+
# self.left = None
6+
# self.right = None
7+
8+
9+
class Solution(object):
10+
def binaryTreePaths(self, root):
11+
"""
12+
:type root: TreeNode
13+
:rtype: List[str]
14+
"""
15+
paths = []
16+
17+
def dfs(root, path=[]):
18+
if not root:
19+
return
20+
path = path + [str(root.val)]
21+
if not root.left and not root.right:
22+
return paths.append('->'.join(path))
23+
if root.left:
24+
dfs(root.left, path)
25+
if root.right:
26+
dfs(root.right, path)
27+
28+
dfs(root)
29+
return paths

Week_01/id_26/LeetCode_26_26.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class Solution(object):
2+
def removeDuplicates(self, nums):
3+
"""
4+
:type nums: List[int]
5+
:rtype: int
6+
"""
7+
k = 1
8+
for n in nums:
9+
if n != nums[k-1]:
10+
nums[k] = n
11+
k += 1
12+
return k
13+

Week_01/id_26/LeetCode_42_26.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
class Solution(object):
2+
def trap(self, height):
3+
"""
4+
:type height: List[int]
5+
:rtype: int
6+
"""
7+
i, j = 0, len(height) - 1
8+
ret, left_max, right_max = 0, 0, 0
9+
while i <= j:
10+
left_max = max(left_max, height[i])
11+
right_max = max(right_max, height[j])
12+
if left_max < right_max:
13+
ret += (left_max - height[i])
14+
i += 1
15+
else:
16+
ret += (right_max - height[j])
17+
j -= 1
18+
return ret
19+
20+
def trap2(self, height):
21+
if not height:
22+
return 0
23+
24+
max_height = height.index(max(height))
25+
ret = 0
26+
27+
max_baffle = 0
28+
for i in range(1, max_height):
29+
max_baffle = max(height[i - 1], max_baffle)
30+
if height[i] < max_baffle:
31+
ret += max_baffle - height[i]
32+
33+
max_baffle = 0
34+
for i in range(len(height) - 2, max_height, -1):
35+
max_baffle = max(height[i + 1], max_baffle)
36+
if height[i] < max_baffle:
37+
ret += max_baffle - height[i]
38+
return ret
39+
40+
41+
print Solution().trap([0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1])
42+
print Solution().trap([5, 2, 1, 2, 1, 5])

0 commit comments

Comments
 (0)