題目:
有 n 個城市,其中一些彼此相連,另一些沒有相連。如果城市 a 與城市 b 直接相連,且城市 b 與城市 c 直接相連,那麼城市 a 與城市 c 間接相連。省份是一組直接或間接相連的城市,組內不含其他沒有相連的城市。
給你乙個 n x n 的矩陣 isconnected ,其中 isconnected[i][j] = 1 表示第 i 個城市和第 j 個城市直接相連,而 isconnected[i][j] = 0 表示二者不直接相連。
返回矩陣中 省份 的數量。
解答:
dfs:遞迴
class
solution
:def
findcirclenum
(self, isconnected: list[list[
int]])
->
int:
n=len(isconnected)
defdfs
(index, isconnected, isvisited)
: isvisited[index]=1
for i in
range
(n):
if isconnected[index]
[i]and
not isvisited[i]
: dfs(i, isconnected, isvisited)
return
isvisited =[0
]*nres =
0for i in
range
(n):
if isvisited[i]==0
: res +=
1 dfs(i, isconnected, isvisited)
return res
bfs:用佇列記錄當前結點的所有鄰居
class
solution
:def
findcirclenum
(self, isconnected: list[list[
int]])
->
int:
n =len(isconnected)
res =
0 que =
isvisited =[0
]*nfor i in
range
(n):
if isvisited[i]
:continue
isvisited[i]=1
res +=
1while que:
cur = que.pop(0)
for j in
range
(n):
if isconnected[cur]
[j]and
not isvisited[j]
: isvisited[j]=1
return res
每日一題 LeetCode
在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。示例 1 輸入 7,5,6,4 輸出 5 限制 0 陣列長度 50000 思想是 分治演算法 所有的 逆序對 於 3 個部分 左邊區間的逆序對 右邊區間的逆序對 橫跨兩個區間的...
LeetCode每日一題(題1028)
最近在刷leetcode每日一題,每次做完之後總能有些收穫,所以想著不如每天寫個部落格記錄一下做的題目的解法以及自己寫的時候問題出在 從先序遍歷還原二叉樹 題目大意 給出乙個字串 1 2 3 4 5 6 7 1代表節點的值,前面的 個數代表節點的深度。如果只有乙個子節點,保證這個節點為左子節點。返回...
LeetCode每日一題(題139)
題目 題目大意 給出乙個字串s和乙個字串陣列words,判斷s是否能夠拆分成多個words中的字串。分析 這道題比較簡單的方式應該是採用動態規劃來做。對於任意乙個字串中的區間,可以判斷該區間組成的字串是否在字典中,如果是,則這個區間的真假取決於前面那個區間的真假。給出狀態轉移方程dp i dp j ...