題目
我的比較暴力的解法
bfsclass
solution
; vector<
int> dy=
; vectorint>> res=matrix;
vectorint>> tmp;
int mm=int_max;
while
(tmp!=res)
res[i]
[j]=mm+1;
}}}}
return res;}}
;
多源bfs框架題解鏈結
level = 0
while queue 不空:
size = queue.size()
while (size --)
level ++;
先找到matrix
中的所有0,然後將0加入佇列並標記訪問,從佇列中的各個 0 同時開始上下左右
的向外部擴散,擴散時,將距離為1的點加入佇列,以此類推。
dpclass
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;}}
;
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 方法用於把乙個可迭代物件轉...