Skip to content

Commit 798a401

Browse files
committedAug 24, 2019
2019-08-23
1 parent c8c90d6 commit 798a401

File tree

5 files changed

+66
-44
lines changed

5 files changed

+66
-44
lines changed
 

‎0258.各位相加/0258-各位相加.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,4 @@ def addDigits(self, num):
44
:type num: int
55
:rtype: int
66
"""
7-
return 9 if num % 9 == 0 and num != 0 else num % 9
8-
7+
return 1 + (num - 1) % 9 if num > 9 else num
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
class Solution(object):
2+
def threeSumSmaller(self, nums, target):
3+
"""
4+
:type nums: List[int]
5+
:type target: int
6+
:rtype: int
7+
"""
8+
res = 0
9+
nums.sort()
10+
for i, num in enumerate(nums):
11+
# 现在要在比i大的下标里,找能组合出target - num 的两个数的组合
12+
t = target - num
13+
left, right = i + 1, len(nums) - 1
14+
while left < right:
15+
if nums[left] + nums[right] >= t:
16+
right -= 1 #和太大了,尝试把和缩小
17+
elif nums[left] + nums[right] < t:
18+
res += right - left #在这种情况下,left可以与【left + 1, right】间任意一个数组成一组答案
19+
left += 1
20+
21+
return res

‎0260.只出现一次的数字III/0260-只出现一次的数字III.py

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,15 @@ def singleNumber(self, nums):
44
:type nums: List[int]
55
:rtype: List[int]
66
"""
7-
dic = collections.Counter(nums)
7+
a, b = 0, 0
8+
mask = 0
9+
for num in nums:
10+
mask ^= num
11+
mask = mask & (-mask)
812

9-
res = list()
10-
for key, val in dic.items():
11-
if val == 1:
12-
res.append(key)
13-
14-
return res
13+
for num in nums:
14+
if mask & num:
15+
a ^= num
16+
else:
17+
b ^= num
18+
return [a, b]
Lines changed: 18 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,31 @@
1-
21
class UnionFindSet(object):
3-
def __init__(self, m):
4-
5-
# m, n = len(grid), len(grid[0])
6-
self.roots = [i for i in range(m)]
7-
self.rank = [0 for i in range(m)]
8-
self.count = m
9-
10-
for i in range(m):
11-
self.roots[i] = i
12-
13-
def find(self, member):
14-
tmp = []
15-
while member != self.roots[member]:
16-
tmp.append(member)
17-
member = self.roots[member]
18-
for root in tmp:
19-
self.roots[root] = member
20-
return member
2+
def __init__(self, n):
3+
self.count = n
4+
self.roots = [i for i in range(n)]
215

6+
def find(self, node):
7+
while self.roots[node] != node:
8+
node = self.roots[node]
9+
return node
10+
2211
def union(self, p, q):
23-
parentP = self.find(p)
24-
parentQ = self.find(q)
25-
if parentP != parentQ:
26-
if self.rank[parentP] > self.rank[parentQ]:
27-
self.roots[parentQ] = parentP
28-
elif self.rank[parentP] < self.rank[parentQ]:
29-
self.roots[parentP] = parentQ
30-
else:
31-
self.roots[parentQ] = parentP
32-
self.rank[parentP] -= 1
33-
self.count -= 1
34-
12+
p_parent = self.find(p)
13+
q_parent = self.find(q)
14+
self.roots[p_parent] = q_parent
15+
self.count -= 1
16+
3517
class Solution(object):
3618
def validTree(self, n, edges):
3719
"""
3820
:type n: int
3921
:type edges: List[List[int]]
4022
:rtype: bool
4123
"""
24+
#开并查集,如果一条边的两个顶点在放进图之前就有相同的根结点,则说明这条边放进去之后会形成一个环
4225
ufs = UnionFindSet(n)
43-
for edge in edges:
44-
if ufs.find(edge[0]) == ufs.find(edge[1]):
26+
for start, end in edges:
27+
if ufs.find(start) == ufs.find(end):
4528
return False
46-
ufs.union(edge[0], edge[1])
47-
29+
ufs.union(start, end)
30+
# print ufs.count
4831
return ufs.count == 1

‎0263.丑数/0263-丑数.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class Solution(object):
2+
def isUgly(self, num):
3+
"""
4+
:type num: int
5+
:rtype: bool
6+
"""
7+
if num <= 0:
8+
return False
9+
while not num % 2:
10+
num /= 2
11+
while not num % 3:
12+
num /= 3
13+
while not num % 5:
14+
num /= 5
15+
return num == 1

0 commit comments

Comments
 (0)