题目
- 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。

javascript
题解:回溯
var exist = function(board, word) {
const track =[]
const l=word.length
const n = board.length;
const m = board[0].length;
const visited = new Array(n)
for (let i = 0; i < n; i++) {
visited[i] = new Array(m).fill(false);
}
const dfs = (i,j,index) =>{
if(index == l){
return true
}
if(i<0 || i>=n || j<0 || j>=m || visited[i][j] || board[i][j] !== word[index]){
return false
}
track.push(board[i][j])
visited[i][j] = true
const found = dfs(i+1,j,index+1) ||
dfs(i-1,j,index+1) ||
dfs(i,j+1,index+1) ||
dfs(i,j-1,index+1)
track.pop()
visited[i][j] = false;
return found
}
for(let i=0;i<n;i++){
for(let j=0;j<m;j++){
if(board[i][j] == word[0] && dfs(i,j,0)){
return true
}
}
}
return false
};
python
题解:回溯
class Solution:
def exist(self, board: List[List[str]], word: str) -> bool:
if not board:
return False
for i in range(len(board)):
for j in range(len(board[0])):
if self.backtrack(board, i, j, word):
return True
return False
def backtrack(self, board, i, j, word):
if len(word) == 0:
return True
if i < 0 or i >= len(board) or j < 0 or j >= len(board[0]) or word[0] != board[i][j]:
return False
tmp = board[i][j]
board[i][j] = '0'
res = self.backtrack(board,i+1,j,word[1:]) or self.backtrack(board,i-1,j,word[1:]) or self.backtrack(board,i,j+1,word[1:]) or self.backtrack(board, i, j-1, word[1:])
board[i][j] = tmp
return res
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人