中等
給定乙個由 0 和 1 組成的矩陣,找出每個元素到最近的 0 的距離。
兩個相鄰元素間的距離為 1 。
示例 1:
輸入:0 0 0
0 1 0
0 0 0
輸出:0 0 0
0 1 0
0 0 0
示例 2:
輸入:0 0 0
0 1 0
1 1 1
輸出:0 0 0
0 1 0
1 2 1
注意:給定矩陣的元素個數不超過 10000。
給定矩陣中至少有乙個元素是 0。
矩陣中的元素只在四個方向上相鄰: 上、下、左、右。
題目**於leetcode。
記錄q =矩陣所有的值為0的節點
將值為0的節點看作已處理過的節點,記錄visited = set(q)
當q不為空的時候依次從q的左邊取節點對取到的節點做以下判斷:
a) 節點的上下左右領結點是否合法存在(即是否越界)
b) 如果上下左右節點存在,判斷其是否已被更新
c) 如果即存在又沒有被更新,則更新其節點值為當前取到的節點值+1,即任何0節點上下左右的領結點到0的距離為1,更新後將更新後的節點加入q和visted裡面。加入q裡面是為了一層一層的更新遠端節點的距離,加入visited是為了以防後續被更新
defupdatematrix(matrix):
matrix_length =len(matrix)
if matrix_length < 1:
return
matrix
row_length =len(matrix[0])
queue =
visited =set()
for i in
range(matrix_length):
for j in
range(row_length):
if matrix[i][j] ==0:
#找到所有的0結點
visited.add((i, j))#
將0節點看作已經被更新的節點visited
while
queue:
i, j =queue.pop(0)
for x, y in [(i + 1, j), (i - 1, j), (i, j + 1), (i, j - 1)]: #
下上右左4個節點,0的上下左右到0的距離都為1
if 0 <= x < matrix_length and 0 <= y < row_length and (x, y) not
in visited: #
x,y範圍區間在矩陣邊界值以內,且未被更新
matrix[x][y] = matrix[i][j] + 1visited.add((x, y))
return matrix
子矩陣 解題報告
目錄2.動態規劃 3.一半dfs一半dp 總結時間到!在乙個n行m列的矩陣中,選出乙個r行c列的子矩陣,使相鄰元素的差的絕對值的和最小。解題思路 在乙個n行m列的矩陣中,選出乙個 r 行 c 列的子矩陣,相當於乙個 n 行 m 列的矩陣,在 n 行中選出 r 行,在 m 列中選出 c 列,選出的行和...
迴旋矩陣演算法題解題思路
原帖見 深圳一家公司面試問題,很囧 題目要求列印乙個迴旋數字矩陣 int i 5 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9 int i 6 1 2 3 4 5 6 20 21 22 23 24 7 19 32 ...
數論之矩陣解題報告2
hdu 2256 不得不感嘆一下,牛 x的題,牛 x的解法,開頭做的時候直接用 double 二分冪求解,但是很不幸測試樣例都沒有過,估計是精度不夠,到 n 5的時候就差了好多,但是如果把這個答案分成兩個部分分別用整數表示呢?那就能很好的解決了精度的問題,本題就很巧妙的運用了共軛數 hdu 1568...