4月打卡 Leetcode 542 01 矩陣

2021-10-05 23:10:37 字數 1921 閱讀 5699

題目

我的比較暴力的解法

class

solution

; vector<

int> dy=

; vectorint>> res=matrix;

vectorint>> tmp;

int mm=int_max;

while

(tmp!=res)

res[i]

[j]=mm+1;

}}}}

return res;}}

;

bfs

多源bfs框架題解鏈結

level = 0

while queue 不空:

size = queue.size()

while (size --)

level ++;

先找到matrix中的所有0,然後將0加入佇列並標記訪問,從佇列中的各個 0 同時開始上下左右的向外部擴散,擴散時,將距離為1的點加入佇列,以此類推。

class

solution

; vector<

int> dy=

; vectorint>>

visited

(matrix.

size()

,vector<

int>

(matrix[0]

.size()

,0))

; queueint>> que;

for(

int i=

0;isize()

;i++))

; visited[i]

[j]=1;

}}}int level=1;

while

(!que.

empty()

));}

}}level++;}

return matrix;}}

;

dp

d p[

i][j

]=mi

n(dp

[i−1

][j]

,dp[

i+1]

[j],

dp[i

][j−

1],d

p[i]

[j+1

])+1

dp[i][j]=min(dp[i-1][j],dp[i+1][j],dp[i][j-1],dp[i][j+1])+1

dp[i][

j]=m

in(d

p[i−

1][j

],dp

[i+1

][j]

,dp[

i][j

−1],

dp[i

][j+

1])+

1

通過【左上到右下】和【右下到左上】的兩次狀態轉移之後,dp[i][j]的值即為題目所求的到最近值為0點的距離。

如果0在上下左右或者是左上 或者右下都可以通過一次狀態轉移得到。

如果0在左下或者右上,需要兩次狀態轉移積攢的的豎直方向值+水平方向值。

幫助理解

class

solution

}for

(int i=matrix.

size()

-1;i>=

0;i--)}

return dp;}}

;

4月打卡 Leetcode 289 生命遊戲

題目鏈結 樸素寫法 雖然思路很樸素,但是效果很好,是雙百的解法。對於邊界的處理,開乙個更大的陣列把原陣列包起來,外圍值設為0,不會影響最終值。class solution intlifevalue vectorint tmp,int i,int j 使用位運算 原地操作 參考題解 int有32位,每...

3月打卡 Leetcode 409 最長回文串

能構成的最長回文串長度 出現偶數次字元的個數 有出現奇數次的字元?1 0 通過比較偶數次字元的長度和整個串的長度,來分析是否有出現奇數次的字元。在遍歷過程中,每出現一對,cnt 遇見兩個a出現2時,cnt 再次遇見兩個a,次數為4,cnt class solution return s.length...

Python學習Day4打卡

合併 分片與索引 字串格式化符 列表,元組,字串的共同點 1.都可以通過索引得到每乙個元素 2.預設索引值總是從0開始 靈活的python還支援負數索引 3.可以通過分片的方法得到乙個範圍內發元素的集合 4.有很多共同的操作符 我們把他們統稱為序列 1.list list 方法用於把乙個可迭代物件轉...