20190712 01矩陣的解題思考

2022-07-20 08:48:13 字數 1443 閱讀 1906

中等

給定乙個由 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是為了以防後續被更新

def

updatematrix(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...