解法一:并查集

  1. class Solution {
  2. private int[] father;
  3. public int findCircleNum(int[][] isConnected) {
  4. final int N = isConnected.length;
  5. father = new int[N];
  6. for (int i = 0; i < N; ++i) {
  7. father[i] = i;
  8. }
  9. for (int i = 0; i < N; ++i) {
  10. for (int j = i + 1; j < N; ++j) {
  11. if (isConnected[i][j] == 1) {
  12. union(i, j);
  13. }
  14. }
  15. }
  16. int ans = 0;
  17. for (int i = 0; i < N; ++i) {
  18. if (father[i] == i) {
  19. ans++;
  20. }
  21. }
  22. return ans;
  23. }
  24. private void union(int x, int y) {
  25. father[find(x)] = find(y);
  26. }
  27. private int find(int x) {
  28. return father[x] == x ? x : find(father[x]);
  29. }
  30. }