Skip to content

Commit 35a6a05

Browse files
Chris WuChris Wu
Chris Wu
authored and
Chris Wu
committed
readme update, group-anagrams.py, open-the-lock.py
1 parent 1fcb924 commit 35a6a05

File tree

3 files changed

+82
-1
lines changed

3 files changed

+82
-1
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ CS DoJo on "How I Got a Job at Google as a Software Engineer". There are also lo
2222
1. <https://www.quora.com/How-should-I-prepare-for-my-Google-interview-if-I-have-1-month-left-and-I%E2%80%99m-applying-for-a-software-engineer-role/answer/Anthony-D-Mays?ch=10&share=5c488000&srid=W0jqp>
2323
2. <https://www.quora.com/How-can-I-get-a-job-at-Facebook-or-Google-in-6-months-I-need-a-concise-work-plan-to-build-a-good-enough-skill-set-Should-I-join-some-other-start-up-or-build-my-own-projects-start-up-Should-I-just-focus-on-practicing-data-structures-and-algorithms/answer/Jimmy-Saade>
2424
3. <https://www.quora.com/What-should-I-know-from-the-CLRS-3rd-edition-book-if-my-aim-is-to-get-into-Google/answer/Jimmy-Saade>
25+
4. Leetcode Topics
26+
<https://docs.google.com/spreadsheets/d/1SbpY-04Cz8EWw3A_LBUmDEXKUMO31DBjfeMoA0dlfIA/edit#gid=126913158>
2527

2628
## Resume
2729
<https://drive.google.com/file/d/10b9NZDhPbUOW_C7108IKe9ev6Ed2UG7F/view>

problems/group-anagrams.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,13 @@ def groupAnagrams(self, strs):
44
anagrams = collections.defaultdict(list)
55
for s in strs:
66
anagrams[''.join(sorted(s))].append(s)
7-
return anagrams.values()
7+
return anagrams.values()
8+
9+
class Solution(object):
10+
def groupAnagrams(self, strs):
11+
anagrams = collections.defaultdict(list)
12+
for s in strs:
13+
hashkey = [0]*26
14+
for c in s: hashkey[ord(c)-97] +=1
15+
anagrams[''.join(hashkey)].append(s)
16+
return anagrams.values()

problems/open-the-lock.py

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
"""
2+
In priority queue, we not only take `steps` in to consideration but also `distance`
3+
And the rest is just like dijkstra.
4+
"""
5+
import heapq
6+
class Solution(object):
7+
def openLock(self, deadends, target):
8+
def getNeighbor(node):
9+
opt = []
10+
for i in xrange(len(node)):
11+
if node[i]==0:
12+
opt.append(tuple(node[:i]+(1,)+node[i+1:]))
13+
opt.append(tuple(node[:i]+(9,)+node[i+1:]))
14+
elif node[i]==9:
15+
opt.append(tuple(node[:i]+(0,)+node[i+1:]))
16+
opt.append(tuple(node[:i]+(8,)+node[i+1:]))
17+
else:
18+
opt.append(tuple(node[:i]+(node[i]+1,)+node[i+1:]))
19+
opt.append(tuple(node[:i]+(node[i]-1,)+node[i+1:]))
20+
return opt
21+
22+
def getDistance(node):
23+
distance = 0
24+
for i in xrange(len(node)):
25+
d = abs(int(node[i])-int(target[i]))
26+
d2 = abs(10-d)
27+
distance+=min(d, d2)
28+
return distance
29+
30+
def tupify(node):
31+
return tuple(map(int, node))
32+
33+
target = tupify(target)
34+
visited = set([tupify(node) for node in deadends])
35+
pq = [(0, 0, tupify('0000'))]
36+
37+
while pq:
38+
_, steps, node = heapq.heappop(pq)
39+
if node==target: return steps
40+
if node in visited: continue
41+
visited.add(node)
42+
for nei in getNeighbor(node):
43+
heapq.heappush(pq, (steps+1+getDistance(nei), steps+1, nei))
44+
return -1
45+
46+
class Solution:
47+
def openLock(self, deadends, target):
48+
def getNeighbor(node):
49+
opt = []
50+
for i in xrange(len(node)):
51+
add_one = delta[node[i]][0]
52+
minus_one = delta[node[i]][1]
53+
opt.append(node[:i]+add_one+node[i+1:])
54+
opt.append(node[:i]+minus_one+node[i + 1:])
55+
return opt
56+
57+
delta = {str(i): [str((i+1)%10), str((i-1)%10)] for i in xrange(10)}
58+
visited = set(deadends)
59+
q = collections.deque([('0000', 0)])
60+
steps = 0
61+
62+
while q:
63+
node, steps = q.popleft()
64+
if node==target: return steps
65+
if node in visited: continue
66+
visited.add(node)
67+
for nei in getNeighbor(node):
68+
q.append((nei, steps+1))
69+
70+
return -1

0 commit comments

Comments
 (0)