LeetCode 79: Word Search — Step-by-Step Visual Trace
Medium — Backtracking | Depth-First Search | Matrix | String
The Problem
Given a 2D board of characters and a target word, determine if the word exists in the grid by connecting adjacent cells horizontally or vertically.
Approach
Use backtracking with depth-first search to explore all possible paths from each starting position. Mark visited cells temporarily to avoid revisiting, then backtrack by restoring the original character.
Time: O(m * n * 4^L) · Space: O(L)
Code
class Solution:
def exist(self, board: List[List[str]], word: str) -> bool:
def dfs(row, col, index):
if index == len(word):
return True
if (
row < 0
or row >= len(board)
or col < 0
or col >= len(board[0])
or board[row][col] != word[index]
):
return False
original_char = board[row][col]
board[row][col] = "#" # Mark the cell as visited
found = (
dfs(row + 1, col, index + 1)
or dfs(row - 1, col, index + 1)
or dfs(row, col + 1, index + 1)
or dfs(row, col - 1, index + 1)
)
board[row][col] = original_char # Backtrack
return found
for row in range(len(board)):
for col in range(len(board[0])):
if board[row][col] == word[0] and dfs(row, col, 0):
return True
return False
Watch It Run
Try it yourself: Open TraceLit and step through every line.
Built with TraceLit — the visual algorithm tracer for LeetCode practice.
Comments