Matrix & Grid Traversal

Trees & Graphs

Coordinate navigation, spiral unwrapping, and 2D cellular automations

250 problems·37 Easy·149 Medium·64 Hard
Pattern Study Guide & Cheat Sheet
▼

Navigate 2D grids as implicit graphs where each cell (r, c) has up to 4 orthogonal neighbors, using direction arrays [(0,1), (0,-1), (1,0), (-1,0)] and boundary checks.

Core Invariant: Grid = Graph where V = R × C and E ≤ 4 × R × C. Use direction vectors `DIRECTIONS = [(0, 1), (0, -1), (1, 0), (-1, 0)]` to replace 4 repetitive if-statements with a single clean loop.

Recognize it (Keywords & Signals)
  • Number of islands / island perimeter / max area of island
  • Flood fill / paint bucket tool
  • Rotting oranges (multi-source BFS)
  • Surrounded regions / capture enclosed territory
  • Pacific Atlantic water flow
When NOT to use

Grid has arbitrary jump teleports or diagonal movement when only orthogonal is specified.

How to solve (Step-by-step)
  1. 1.Define dimensions `ROWS, COLS = len(grid), len(grid[0])`.
  2. 2.Define directions: `DIRECTIONS = [(0, 1), (0, -1), (1, 0), (-1, 0)]`.
  3. 3.Centralize boundary check: `0 <= r < ROWS and 0 <= c < COLS and grid[r][c] == target`.
  4. 4.For DFS/BFS: mark visited immediately (e.g. mutate `grid[r][c] = "0"` in-place or add to `visited` set).
  5. 5.For multi-source BFS: enqueue all starting sources (e.g. all rotten oranges) at time 0 before running queue.
Watch for (Interview Traps)
  • Mixing up `ROWS` and `COLS` in boundary checks (`r < COLS` or `c < ROWS`)
  • Mutating grid without confirming if mutation is allowed in interview problem statement
  • In multi-source BFS: incrementing time counter even when no fresh items were converted
Multi-Source Grid BFS (Rotting Oranges)
from collections import deque

def oranges_rotting(grid: list[list[int]]) -> int:
    ROWS, COLS = len(grid), len(grid[0])
    queue = deque()
    fresh_count = 0
    
    # 1. Multi-source initialization: find all rotten oranges and count fresh
    for r in range(ROWS):
        for c in range(COLS):
            if grid[r][c] == 2:
                queue.append((r, c))
            elif grid[r][c] == 1:
                fresh_count += 1
                
    if fresh_count == 0:
        return 0
        
    minutes = 0
    DIRECTIONS = [(0, 1), (0, -1), (1, 0), (-1, 0)]
    
    # 2. BFS spreading level by level
    while queue and fresh_count > 0:
        minutes += 1
        for _ in range(len(queue)):
            r, c = queue.popleft()
            for dr, dc in DIRECTIONS:
                nr, nc = r + dr, c + dc
                if 0 <= nr < ROWS and 0 <= nc < COLS and grid[nr][nc] == 1:
                    grid[nr][nc] = 2  # Infect fresh orange
                    fresh_count -= 1
                    queue.append((nr, nc))
                    
    return minutes if fresh_count == 0 else -1
Cost
O(R * C) visits each grid cell at most a constant number of times · O(R * C) for queue/recursion stack in worst case (Can mutate grid in-place to achieve O(1) auxiliary heap space.)
Canonical problems
#200 Number of Islands: Iterate cells; whenever "1" found, trigger DFS to sink connected land
#994 Rotting Oranges: Multi-source BFS tracks time for rot to propagate across grid
#130 Surrounded Regions: Start DFS from boundary "O"s to preserve non-enclosed regions
#417 Pacific Atlantic Water Flow: Reverse flow: DFS upwards from Pacific and Atlantic borders
Medium·93 companies·Max freq 100%·Acc 64.7%
RedfinAMDAnduril+90
Medium·56 companies·Max freq 100%·Acc 57.2%
Wissen TechnologyEpic GamesZoho+53
Medium·55 companies·Max freq 100%·Acc 59.0%
C3.aiInformaticaLyft+52
Medium·42 companies·Max freq 100%·Acc 47.7%
FaireKaratUber+39
Medium·41 companies·Max freq 100%·Acc 80.4%
ZillowSIGRakuten+38
Medium·31 companies·Max freq 100%·Acc 64.7%
UdemyWissen TechnologyConfluent+28
Medium·30 companies·Max freq 100%·Acc 0.5%
GSA CapitalOPPOWise+27
Hard·25 companies·Max freq 90%·Acc 38.6%
SnowflakeCiscoTwo Sigma+22
Medium·25 companies·Max freq 89%·Acc 63.3%
NykaaeBayZScaler+22
Medium·23 companies·Max freq 100%·Acc 54.3%
Wissen TechnologyNeetCode 150NeetCode 150+20
Medium·22 companies·Max freq 100%·Acc 74.1%
GrubhubSchlumbergerRoku+19
Hard·21 companies·Max freq 93%·Acc 56.8%
DoorDashWeRideDuolingo+18
Hard·19 companies·Max freq 100%·Acc 65.6%
ConfluentSnapSnap+16
Medium·18 companies·Max freq 100%·Acc 68.5%
SpaceXTexas InstrumentsGoldman Sachs+15
Hard·18 companies·Max freq 90%·Acc 56.9%
SnapSnapMoloco+15
Medium·18 companies·Max freq 88%·Acc 57.6%
MotiveBaiduWhatnot+15
Hard·17 companies·Max freq 100%·Acc 64.1%
Media.netMedia.netOtter.ai+14
Hard·17 companies·Max freq 83%·Acc 0.6%
WorldQuantZeta GlobalArcesium+14
Hard·16 companies·Max freq 100%·Acc 46.5%
AppFolioPinterestNuro+13
Medium·16 companies·Max freq 100%·Acc 72.8%
AcornsDropboxTwo Sigma+13
Medium·16 companies·Max freq 81%·Acc 51.8%
MetaAndurilYahoo+13
Medium·15 companies·Max freq 100%·Acc 61.2%
Urban CompanyServiceNowNeetCode 150+12
Hard·15 companies·Max freq 100%·Acc 45.0%
Applied IntuitionZenefitsGlean+12
Medium·15 companies·Max freq 87%·Acc 45.8%
PornhubMolocoNeetCode 150+12
Medium·14 companies·Max freq 100%·Acc 54.4%
GravitonPhonePeDoorDash+11
Medium·14 companies·Max freq 63%·Acc 60.5%
UberWalmart LabsSnap+11
Medium·13 companies·Max freq 100%·Acc 58.8%
WiseDatabricksWaymo+10
Medium·13 companies·Max freq 100%·Acc 64.1%
DoorDashNeetCode 150NeetCode 150+10
Medium·13 companies·Max freq 92%·Acc 62.9%
SnapTikTokSnap+10
Easy·13 companies·Max freq 88%·Acc 68.6%
CriteoQualtricsAmazon+10
Medium·12 companies·Max freq 100%·Acc 67.3%
NikeLiftoffMeta+9
Hard·12 companies·Max freq 100%·Acc 39.9%
Akuna CapitalInMobiHarness+9
Medium·12 companies·Max freq 100%·Acc 0.7%
XXPhonePe+9
Medium·12 companies·Max freq 75%·Acc 0.5%
ZeptoAgodaIMC+9
Medium·12 companies·Max freq 63%·Acc 48.2%
ZomatoTeslaAnduril+9
Medium·12 companies·Max freq 53%·Acc 75.4%
eBayAdobeAmazon+9
Medium·11 companies·Max freq 100%·Acc 77.6%
BrazeRobloxCapital One+8
Hard·11 companies·Max freq 100%·Acc 61.5%
XXSnap+8
Hard·11 companies·Max freq 78%·Acc 68.0%
WeRideNeetCode 150NeetCode 150+8
Medium·11 companies·Max freq 71%·Acc 0.6%
OktaWaymoUpstart+8
Hard·10 companies·Max freq 100%·Acc 0.4%
DarwinboxIntuitZoho+7
Medium·10 companies·Max freq 100%·Acc 82.5%
SquareVisaSIG+7
Medium·10 companies·Max freq 63%·Acc 69.3%
NuroPinterestLinkedIn+7
Hard·9 companies·Max freq 100%·Acc 39.6%
RampAirbnbRippling+6
Medium·9 companies·Max freq 78%·Acc 68.8%
RobinhoodNuroApplied Intuition+6
Medium·9 companies·Max freq 67%·Acc 63.6%
WaymoNutanixVisa+6
Easy·9 companies·Max freq 65%·Acc 74.5%
ZohoJosh TechnologyOracle+6
Medium·9 companies·Max freq 53%·Acc 48.8%
eBayUberWalmart Labs+6
Medium·8 companies·Max freq 100%·Acc 77.6%
HSBCTinkoffMicrostrategy+5
Medium·8 companies·Max freq 100%·Acc 84.6%
DataminrUberGoogle+5
50 displayed (of 50 matching)Filtered: All Companies

Top Companies Testing Matrix & Grid Traversal

Browse company-specific interview problem lists and recency breakdowns:

Explore All 22 DSA Coding Patterns

Master core algorithmic patterns tested in FAANG & Big Tech coding interviews.

Patterns Hub

Matrix & Grid Traversal frequently asked questions

What is the Matrix & Grid Traversal pattern in coding interviews?

Coordinate navigation, spiral unwrapping, and 2D cellular automations It is categorized under Trees & Graphs and features 250 curated interview problems across Easy (37), Medium (149), and Hard (64) difficulties.

Which tech companies frequently test Matrix & Grid Traversal?

Companies frequently asking Matrix & Grid Traversal questions include Google, Amazon, Microsoft, Meta, Bloomberg, Uber.

How do I master the Matrix & Grid Traversal pattern?

Start by studying the algorithmic strategy and template code, then practice Easy and Medium problems before attempting Hard problems under timed conditions.