Mediumbacktrackingdfs
Решить задачу Word Search (LeetCode 79)?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
LeetCode 79. Найти слово в grid (последовательность соседних cells). DFS с backtracking, mark in-place.
def exist(board, word):
rows, cols = len(board), len(board[0])
def dfs(r, c, i):
if i == len(word):
return True
if (r < 0 or r >= rows or c < 0 or c >= cols
or board[r][c] != word[i]):
return False
temp, board[r][c] = board[r][c], '#' # mark visited
found = (dfs(r+1, c, i+1) or dfs(r-1, c, i+1)
or dfs(r, c+1, i+1) or dfs(r, c-1, i+1))
board[r][c] = temp # unmark
return found
for r in range(rows):
for c in range(cols):
if board[r][c] == word[0] and dfs(r, c, 0):
return True
return FalseШаблон: explore → mark → recurse → unmark. Optimization: если count[word[0]] > count[word[-1]] — reverse word (начать с более редкой буквы = меньше стартовых точек). Word Search II (212) — много слов: построить Trie, DFS из каждой клетки. Без Trie — O(words × rows × cols × 4ᴸ), с Trie — O(rows × cols × 4ᴸ).
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.