-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathweeklyContest25.py
81 lines (70 loc) · 2.2 KB
/
weeklyContest25.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#!/usr/bin/python -tt
# -*- coding: utf-8 -*-
class Solution():
def checkPerfectNumber(self, num):
"""
:type num: int
:rtype: bool
"""
if num <= 1:
return False
from math import sqrt
divisors = set([1])
for i in range(2, int(sqrt(num)) + 1):
if num % i == 0:
divisors.add(i)
divisors.add(num/i)
# print divisors
return num == sum(divisors)
def complexNumberMultiply(self, a, b):
"""
:type a: str
:type b: str
:rtype: str
"""
ar, ai = self.strToComp(a)
br, bi = self.strToComp(b)
sr = ar * br - ai * bi
si = ar * bi + ai * br
return str(sr) + "+" + str(si) + "i"
def strToComp(self, s):
a, b = s.split("+")
return (int(a), int(b[:-1]))
def boundaryOfBinaryTree(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
if root is None:
return []
if (root.left is None) and (root.right is None):
return [root.val]
if (root.left is None):
l, v, r = self.boundary(root.right)
print v, r
return [root.val] + v[:-1] + r
if (root.right) is None:
l, v, r = self.boundary(root.left)
return [root.val] + l[:-1] + v
l, v, r = self.boundary(root)
return l[:-1] + v[:-1] + r[:-1]
def boundary(self, root):
if root is None:
return ([], [], [])
if (root.left is None) and (root.right is None):
return ([root.val], [root.val], [root.val])
if (root.left is None):
rl, rv, rr = self.boundary(root.right)
return ([root.val] + rl, rv, rr + [root.val])
if (root.right is None):
ll, lv, lr = self.boundary(root.left)
return ([root.val] + ll, lv, lr + [root.val])
ll, lv, lr = self.boundary(root.left)
rl, rv, rr = self.boundary(root.right)
return ([root.val] + ll, lv + rv, rr + [root.val])
def removeBoxes(self, boxes):
"""
:type boxes: List[int]
:rtype: int
"""
pass