function findCircleNum(M: number[][]): number {
const visited: Array<boolean> = Array(M.length);
let groups: number = 0;
const dfs = (M: number[][], cur: number, visited: Array<boolean>): void => {
for (let i = 0; i < M[cur].length; i++) {
// If they are not friends or the ith person has been visited, skip him.
if (M[cur][i] === 0 || visited[i]) continue;
// Mark as visited because they are all in the same friend circle with the cur person.
// And continue the search.
visited[i] = true;
dfs(M, i, visited);
}
};
for (let i = 0; i < M.length; i++) {
// If he's not been visited, then there is a new friend circle.
// Start searching for all his friends.
if (!visited[i]) {
groups++;
visited[i] = true;
dfs(M, i, visited);
}
}
return groups;
}
代码(迭代)
TypeScript Code
function findCircleNum(M: number[][]): number {
let ans: number = 0;
const visited: Array<boolean> = Array(M.length);
const stack: Array<number> = [];
for (let i = 0; i < M.length; i++) {
if (visited[i]) continue;
stack.push(i);
ans++;
while (stack.length) {
const cur: number = stack.pop() as number;
visited[cur] = true;
const friends: Array<number> = M[cur];
for (let j = 0; j < friends.length; j++) {
if (visited[j] || friends[j] === 0) continue;
stack.push(j);
}
}
}
return ans;
}