Skip to content

Commit 940a899

Browse files
committed
2019-05-28
1 parent ffd54ed commit 940a899

File tree

6 files changed

+178
-0
lines changed

6 files changed

+178
-0
lines changed
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
from collections import deque
2+
class Solution(object):
3+
def ladderLength(self, beginWord, endWord, wordList):
4+
"""
5+
:type beginWord: str
6+
:type endWord: str
7+
:type wordList: List[str]
8+
:rtype: int
9+
"""
10+
if endWord not in wordList or beginWord == endWord:
11+
return 0
12+
visited = set()
13+
wordList = set(wordList)
14+
15+
q = deque()
16+
q.append([beginWord, 0])
17+
18+
char = "abcdefghijklmnopqrstuvwxyz"
19+
while q:
20+
cur, cnt = q.popleft() #从队列里取一个出来
21+
if cur == endWord: #如果刚好找到了
22+
return cnt + 1
23+
24+
for i in range(len(cur)):
25+
for j in range(26):
26+
word = cur[:i] + char[j] + cur[i + 1:] #把26种变换可能都生成
27+
if word in wordList and word not in visited: #判断变换有没有效
28+
visited.add(word)
29+
q.append([word, cnt + 1])
30+
31+
return 0
32+
33+
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
from collections import deque
2+
class Solution(object):
3+
def numSquares(self, n):
4+
"""
5+
:type n: int
6+
:rtype: int
7+
"""
8+
record = []
9+
for i in range(1, int(n ** 0.5) + 1):
10+
record.append(i * i)
11+
# print record
12+
visited = set()
13+
q = deque()
14+
q.append([0, 0])
15+
while(q):
16+
m, cnt = q.popleft()
17+
18+
for num in record:
19+
s = m + num
20+
if s == n:
21+
return cnt + 1
22+
if s < n and s not in visited:
23+
visited.add(s)
24+
q.append([s, cnt + 1])
25+
# return
26+
27+
28+
29+
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class Solution(object):
2+
def getModifiedArray(self, length, updates):
3+
"""
4+
:type length: int
5+
:type updates: List[List[int]]
6+
:rtype: List[int]
7+
"""
8+
res = [0 for _ in range(length + 1)]
9+
10+
for update in updates:
11+
start, end, inc = update[0], update[1], update[2]
12+
res[start] += inc
13+
res[end + 1] -= inc
14+
15+
for i in range(1, length):
16+
res[i] += res[i - 1]
17+
18+
return res[:-1]
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
from collections import deque
2+
class Solution(object):
3+
def minMutation(self, start, end, bank):
4+
bank = set(bank)
5+
if end not in bank:
6+
return -1
7+
q = deque()
8+
q.append([start, 0])
9+
visited = set()
10+
char = "ACGT"
11+
while q: #开始BFS
12+
cur, cnt = q.popleft() #取一个出来
13+
if cur == end: #如果找到了
14+
return cnt
15+
16+
for i in range(len(cur)):
17+
for j in range(4):
18+
new = cur[:i] + char[j] + cur[i + 1:] #生成从当前基因可以变换到的新基因
19+
20+
if new in bank and new not in visited: #如果新基因有效
21+
visited.add(new)
22+
q.append([new, cnt + 1])
23+
24+
return -1
25+

0542.01矩阵/0542-01矩阵.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
from collections import deque
2+
class Solution(object):
3+
def updateMatrix(self, matrix):
4+
"""
5+
:type matrix: List[List[int]]
6+
:rtype: List[List[int]]
7+
"""
8+
if not matrix or not matrix[0]:
9+
return matrix
10+
m, n = len(matrix), len(matrix[0])
11+
res = matrix[:]
12+
13+
q = deque()
14+
15+
for i in range(m):
16+
for j in range(n):
17+
if matrix[i][j] == 0:
18+
q.append([[i, j], 0])
19+
20+
dx = [1, -1, 0, 0]
21+
dy = [0, 0, 1, -1]
22+
visited = [[0 for _ in range(n + 1)] for _ in range(m + 1)]
23+
24+
while q:
25+
tmp, distance = q.popleft()
26+
x0, y0 = tmp[0], tmp[1]
27+
28+
if matrix[x0][y0] == 1:
29+
res[x0][y0] = distance
30+
31+
for k in range(4):
32+
x = x0 + dx[k]
33+
y = y0 + dy[k]
34+
35+
if 0 <= x < m and 0 <= y < n and visited[x][y] != 1:
36+
q.append([[x, y], distance + 1])
37+
visited[x][y] = 1
38+
return res
39+
40+
41+
42+
43+
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
from collections import deque
2+
class Solution(object):
3+
def openLock(self, deadends, target):
4+
"""
5+
:type deadends: List[str]
6+
:type target: str
7+
:rtype: int
8+
"""
9+
deadends = set(deadends)
10+
if "0000" in deadends: #如果连起点都不能走就88
11+
return -1
12+
13+
queue = deque()
14+
queue.append(["0000", 0])
15+
cnt = 0
16+
17+
while queue:
18+
node, cnt = queue.popleft() #取一个点出来,cnt是当前走的步数
19+
if node == target: #找到了
20+
return cnt
21+
22+
for i in range(4):
23+
for j in [1, -1]:
24+
next_node = node[:i] + str((int(node[i]) + j) % 10) + node[i + 1:]
25+
26+
if next_node not in deadends: #新的点可以走而且没走过
27+
deadends.add(next_node) #避免重复
28+
queue.append([next_node, cnt + 1])
29+
30+
return -1

0 commit comments

Comments
 (0)