Skip to content

Commit 9e135c8

Browse files
committed
feat: add solutions to leetcode problem: No.0547
1 parent 48ea9ec commit 9e135c8

File tree

4 files changed

+119
-4
lines changed

4 files changed

+119
-4
lines changed

solution/0500-0599/0547.Friend Circles/README.md

+41-2
Original file line numberDiff line numberDiff line change
@@ -44,22 +44,61 @@
4444

4545
<!-- 这里可写通用的实现逻辑 -->
4646

47+
深度优先搜索。判断学生与学生之间是否属于同一个连通分量,最后连通分量的总数即为结果。
48+
4749
<!-- tabs:start -->
4850

4951
### **Python3**
5052

5153
<!-- 这里可写当前语言的特殊实现逻辑 -->
5254

5355
```python
54-
56+
class Solution:
57+
def findCircleNum(self, isConnected: List[List[int]]) -> int:
58+
def dfs(i):
59+
for j in range(n):
60+
if not visited[j] and isConnected[i][j] == 1:
61+
visited[j] = True
62+
dfs(j)
63+
64+
n = len(isConnected)
65+
visited = [False] * n
66+
num = 0
67+
for i in range(n):
68+
if not visited[i]:
69+
dfs(i)
70+
num += 1
71+
return num
5572
```
5673

5774
### **Java**
5875

5976
<!-- 这里可写当前语言的特殊实现逻辑 -->
6077

6178
```java
62-
79+
class Solution {
80+
public int findCircleNum(int[][] isConnected) {
81+
int n = isConnected.length;
82+
boolean[] visited = new boolean[n];
83+
int num = 0;
84+
for (int i = 0; i < n; ++i) {
85+
if (!visited[i]) {
86+
dfs(isConnected, visited, i, n);
87+
++num;
88+
}
89+
}
90+
return num;
91+
}
92+
93+
private void dfs(int[][] isConnected, boolean[] visited, int i, int n) {
94+
for (int j = 0; j < n; ++j) {
95+
if (!visited[j] && isConnected[i][j] == 1) {
96+
visited[j] = true;
97+
dfs(isConnected, visited, j, n);
98+
}
99+
}
100+
}
101+
}
63102
```
64103

65104
### **...**

solution/0500-0599/0547.Friend Circles/README_EN.md

+39-2
Original file line numberDiff line numberDiff line change
@@ -77,13 +77,50 @@ Given a <b>N\*N</b> matrix <b>M</b> representing the friend relationship between
7777
### **Python3**
7878

7979
```python
80-
80+
class Solution:
81+
def findCircleNum(self, isConnected: List[List[int]]) -> int:
82+
def dfs(i):
83+
for j in range(n):
84+
if not visited[j] and isConnected[i][j] == 1:
85+
visited[j] = True
86+
dfs(j)
87+
88+
n = len(isConnected)
89+
visited = [False] * n
90+
num = 0
91+
for i in range(n):
92+
if not visited[i]:
93+
dfs(i)
94+
num += 1
95+
return num
8196
```
8297

8398
### **Java**
8499

85100
```java
86-
101+
class Solution {
102+
public int findCircleNum(int[][] isConnected) {
103+
int n = isConnected.length;
104+
boolean[] visited = new boolean[n];
105+
int num = 0;
106+
for (int i = 0; i < n; ++i) {
107+
if (!visited[i]) {
108+
dfs(isConnected, visited, i, n);
109+
++num;
110+
}
111+
}
112+
return num;
113+
}
114+
115+
private void dfs(int[][] isConnected, boolean[] visited, int i, int n) {
116+
for (int j = 0; j < n; ++j) {
117+
if (!visited[j] && isConnected[i][j] == 1) {
118+
visited[j] = true;
119+
dfs(isConnected, visited, j, n);
120+
}
121+
}
122+
}
123+
}
87124
```
88125

89126
### **...**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
class Solution {
2+
public int findCircleNum(int[][] isConnected) {
3+
int n = isConnected.length;
4+
boolean[] visited = new boolean[n];
5+
int num = 0;
6+
for (int i = 0; i < n; ++i) {
7+
if (!visited[i]) {
8+
dfs(isConnected, visited, i, n);
9+
++num;
10+
}
11+
}
12+
return num;
13+
}
14+
15+
private void dfs(int[][] isConnected, boolean[] visited, int i, int n) {
16+
for (int j = 0; j < n; ++j) {
17+
if (!visited[j] && isConnected[i][j] == 1) {
18+
visited[j] = true;
19+
dfs(isConnected, visited, j, n);
20+
}
21+
}
22+
}
23+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
class Solution:
2+
def findCircleNum(self, isConnected: List[List[int]]) -> int:
3+
def dfs(i):
4+
for j in range(n):
5+
if not visited[j] and isConnected[i][j] == 1:
6+
visited[j] = True
7+
dfs(j)
8+
9+
n = len(isConnected)
10+
visited = [False] * n
11+
num = 0
12+
for i in range(n):
13+
if not visited[i]:
14+
dfs(i)
15+
num += 1
16+
return num

0 commit comments

Comments
 (0)