Bird
Raised Fist0
DSA Typescriptprogramming~20 mins

Number of Islands BFS and DFS in DSA Typescript - Practice Problems & Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Island Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of BFS traversal on grid
What is the number of islands found by BFS in the given grid?
DSA Typescript
const grid = [
  ['1','1','0','0','0'],
  ['1','1','0','0','0'],
  ['0','0','1','0','0'],
  ['0','0','0','1','1']
];

function numIslandsBFS(grid: string[][]): number {
  if (!grid.length) return 0;
  const rows = grid.length;
  const cols = grid[0].length;
  let count = 0;
  const directions = [[1,0],[-1,0],[0,1],[0,-1]];

  for (let r = 0; r < rows; r++) {
    for (let c = 0; c < cols; c++) {
      if (grid[r][c] === '1') {
        count++;
        const queue = [[r,c]];
        grid[r][c] = '0';
        while(queue.length) {
          const [x,y] = queue.shift()!;
          for (const [dx,dy] of directions) {
            const nx = x + dx;
            const ny = y + dy;
            if (nx >= 0 && nx < rows && ny >= 0 && ny < cols && grid[nx][ny] === '1') {
              queue.push([nx, ny]);
              grid[nx][ny] = '0';
            }
          }
        }
      }
    }
  }
  return count;
}

console.log(numIslandsBFS(grid));
A1
B2
C4
D3
Attempts:
2 left
💡 Hint
Count connected groups of '1's using BFS.
❓ Predict Output
intermediate
2:00remaining
Output of DFS traversal on grid
What is the number of islands found by DFS in the given grid?
DSA Typescript
const grid = [
  ['1','1','0','0','0'],
  ['1','1','0','0','0'],
  ['0','0','1','0','0'],
  ['0','0','0','1','1']
];

function numIslandsDFS(grid: string[][]): number {
  if (!grid.length) return 0;
  const rows = grid.length;
  const cols = grid[0].length;
  let count = 0;

  function dfs(r: number, c: number) {
    if (r < 0 || c < 0 || r >= rows || c >= cols || grid[r][c] === '0') return;
    grid[r][c] = '0';
    dfs(r+1, c);
    dfs(r-1, c);
    dfs(r, c+1);
    dfs(r, c-1);
  }

  for (let r = 0; r < rows; r++) {
    for (let c = 0; c < cols; c++) {
      if (grid[r][c] === '1') {
        count++;
        dfs(r, c);
      }
    }
  }
  return count;
}

console.log(numIslandsDFS(grid));
A1
B3
C2
D4
Attempts:
2 left
💡 Hint
Use DFS to mark all connected land cells.
🧠 Conceptual
advanced
1:30remaining
Why mark visited cells in Number of Islands?
Why do BFS and DFS algorithms mark visited land cells as '0' or visited when counting islands?
ATo avoid counting the same island multiple times by revisiting cells.
BTo increase the number of islands found by splitting them.
CTo convert water cells into land cells for easier traversal.
DTo speed up the algorithm by skipping water cells.
Attempts:
2 left
💡 Hint
Think about what happens if you revisit the same land cell.
❓ Predict Output
advanced
2:00remaining
Output after modifying grid during DFS
What is the final state of the grid after running DFS-based number of islands on this input?
DSA Typescript
const grid = [
  ['1','0','1'],
  ['0','1','0'],
  ['1','0','1']
];

function numIslandsDFS(grid: string[][]): number {
  if (!grid.length) return 0;
  const rows = grid.length;
  const cols = grid[0].length;
  let count = 0;

  function dfs(r: number, c: number) {
    if (r < 0 || c < 0 || r >= rows || c >= cols || grid[r][c] === '0') return;
    grid[r][c] = '0';
    dfs(r+1, c);
    dfs(r-1, c);
    dfs(r, c+1);
    dfs(r, c-1);
  }

  for (let r = 0; r < rows; r++) {
    for (let c = 0; c < cols; c++) {
      if (grid[r][c] === '1') {
        count++;
        dfs(r, c);
      }
    }
  }
  return count;
}

numIslandsDFS(grid);
console.log(grid);
A[['0','0','1'],['0','0','0'],['1','0','0']]
B[['1','0','1'],['0','1','0'],['1','0','1']]
C[['0','0','0'],['0','0','0'],['0','0','0']]
D[['0','0','0'],['0','1','0'],['0','0','0']]
Attempts:
2 left
💡 Hint
DFS changes all connected '1's to '0's.
🧠 Conceptual
expert
1:30remaining
Time complexity of Number of Islands algorithms
What is the time complexity of BFS or DFS approach to count the number of islands in an m x n grid?
AO(m * n), because each cell is visited at most once.
BO(m + n), because BFS/DFS only traverse rows and columns separately.
CO((m * n)^2), because each cell is compared with every other cell.
DO(1), because the grid size is fixed.
Attempts:
2 left
💡 Hint
Consider how many times each cell is processed.

Practice

(1/5)
1. What does the "Number of Islands" problem ask you to find in a grid of '1's and '0's?
easy
A. Calculate the perimeter of islands
B. Count how many groups of connected '1's (islands) exist
C. Count all '0's in the grid
D. Find the largest island size

Solution

  1. Step 1: Understand the grid representation

    The grid contains '1's representing land and '0's representing water.
  2. Step 2: Identify what the problem asks

    We need to count how many separate groups of connected '1's (islands) are present.
  3. Final Answer:

    Count how many groups of connected '1's (islands) exist -> Option B
  4. Quick Check:

    Islands = groups of connected '1's [OK]
Hint: Islands = connected lands, count groups of '1's [OK]
Common Mistakes:
  • Counting total '1's instead of groups
  • Confusing islands with largest island size
  • Counting '0's instead of '1's
2. Which of the following TypeScript code snippets correctly initializes a 2D grid for the Number of Islands problem?
easy
A. const grid: string[] = ['10', '01'];
B. const grid: number[] = [1, 0, 0, 1];
C. const grid: string[][] = [['1','0'], ['0','1']];
D. const grid: string[][] = ['1', '0', '0', '1'];

Solution

  1. Step 1: Check the grid type

    The grid should be a 2D array of strings representing '1' and '0'.
  2. Step 2: Validate each option

    const grid: string[][] = [['1','0'], ['0','1']]; correctly uses a 2D array of strings. Others use incorrect types or structures.
  3. Final Answer:

    const grid: string[][] = [['1','0'], ['0','1']]; -> Option C
  4. Quick Check:

    2D array of strings = correct grid type [OK]
Hint: Grid must be 2D array of strings '1' or '0' [OK]
Common Mistakes:
  • Using 1D arrays instead of 2D
  • Using number arrays instead of string arrays
  • Initializing grid as array of strings instead of array of arrays
3. Given the following grid, what is the number of islands found by a BFS or DFS algorithm?
const grid = [
  ['1','1','0','0','0'],
  ['1','1','0','0','0'],
  ['0','0','1','0','0'],
  ['0','0','0','1','1']
];
medium
A. 4
B. 2
C. 1
D. 3

Solution

  1. Step 1: Identify connected groups of '1's

    First island: top-left 2x2 block of '1's. Second island: single '1' at (2,2). Third island: two connected '1's at bottom-right.
  2. Step 2: Count total islands

    There are 3 separate islands in total.
  3. Final Answer:

    3 -> Option D
  4. Quick Check:

    Count connected '1' groups = 3 [OK]
Hint: Count connected '1' clusters carefully [OK]
Common Mistakes:
  • Counting diagonal connections as connected
  • Missing single isolated '1's
  • Counting all '1's instead of groups
4. Identify the bug in this DFS implementation for counting islands:
function dfs(grid: string[][], r: number, c: number) {
  if (r < 0 || c < 0 || r >= grid.length || c >= grid[0].length || grid[r][c] === '0') {
    return;
  }
  grid[r][c] = '0';
  dfs(grid, r + 1, c);
  dfs(grid, r - 1, c);
  dfs(grid, r, c + 1);
  // Missing dfs call here
}
medium
A. Missing dfs call for left neighbor (r, c - 1)
B. Should check for '1' instead of '0' in base case
C. grid[r][c] should be set to '1' instead of '0'
D. Parameters r and c are swapped in recursive calls

Solution

  1. Step 1: Review recursive DFS calls

    DFS calls are made for down, up, and right neighbors but missing left neighbor (r, c - 1).
  2. Step 2: Identify missing neighbor call

    Without calling dfs for left neighbor, some connected lands won't be visited, causing incorrect island count.
  3. Final Answer:

    Missing dfs call for left neighbor (r, c - 1) -> Option A
  4. Quick Check:

    All four directions must be checked [OK]
Hint: Check all 4 directions in DFS/BFS [OK]
Common Mistakes:
  • Forgetting one direction in recursion
  • Incorrect base case condition
  • Not marking visited cells properly
5. You want to modify the BFS approach to count islands but only consider horizontal connections (left and right) and ignore vertical connections. Given this grid:
const grid = [
  ['1','0','1','0'],
  ['1','1','0','0'],
  ['0','0','1','1']
];
How many islands will your modified BFS count?
hard
A. 4
B. 3
C. 5
D. 6

Solution

  1. Step 1: Understand horizontal-only connections

    Islands connect only left and right neighbors, vertical neighbors are ignored.
  2. Step 2: Count islands with horizontal connections

    Row 0: '1' at (0,0) alone, '1' at (0,2) alone -> 2 islands.
    Row 1: '1's at (1,0) and (1,1) connected horizontally -> 1 island.
    Row 2: '1's at (2,2) and (2,3) connected horizontally -> 1 island.
    Total islands = 2 + 1 + 1 = 4.
  3. Final Answer:

    4 -> Option A
  4. Quick Check:

    Horizontal groups counted = 4 [OK]
Hint: Count only horizontal neighbors as connected [OK]
Common Mistakes:
  • Counting vertical neighbors as connected
  • Merging islands vertically by mistake
  • Ignoring isolated horizontal '1's
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard