Exemple #1
0
  public int numIslands(char[][] grid) {
    int counter = 0;
    int n = grid.length;
    if (n == 0) return 0;
    int m = grid[0].length;
    if (m == 0) return 0;
    int[][] direct = new int[][] {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};

    for (int i = 0; i < n; i++) {
      for (int j = 0; j < m; j++) {
        if (grid[i][j] == '1') {
          counter++;
          ArrayDeque<Integer> q = new ArrayDeque<Integer>();
          grid[i][j] = 0;
          q.add(i);
          q.add(j);
          while (!q.isEmpty()) {
            int r = q.poll();
            int c = q.poll();
            for (int[] d : direct) {
              int rr = d[0] + r;
              int cc = d[1] + c;
              if (rr >= 0 && rr < n && cc >= 0 && cc < m && grid[rr][cc] == '1') {
                grid[rr][cc] = 0;
                q.add(rr);
                q.add(cc);
              }
            }
          }
        }
      }
    }
    return counter;
  }
 public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
   List<List<Integer>> r = new ArrayList<List<Integer>>();
   ArrayDeque<TreeNode> q = new ArrayDeque<TreeNode>();
   if (root == null) return r;
   q.offer(root);
   boolean reversedOrder = false;
   while (!q.isEmpty()) {
     int len = q.size();
     List<Integer> level = new LinkedList<Integer>();
     for (int i = 0; i < len; i++) {
       TreeNode n = q.poll();
       if (reversedOrder) level.add(0, n.val);
       else level.add(n.val);
       if (n.left != null) q.offer(n.left);
       if (n.right != null) q.offer(n.right);
     }
     r.add(level);
     reversedOrder = !reversedOrder;
   }
   return r;
 }