老师好,我写的这个算法超时了,有啥优化办法吗
来源:8-6 二维平面上的回溯法 Word Search
梦星魂1
2020-06-25
var exist = function (board, word) {
let directionArr = [[-1, 0], [1, 0], [0, -1], [0, 1]]; // 表示上下左右四个方向
let visited = {};
let m = board.length;
let n = board[0].length;
function inArea(x, y) {
return x >= 0 && x < m && y >= 0 && y < n;
}
function search(startX, startY, index) {
// 移动到了末尾
if (index === word.length - 1) {
return board[startX][startY] === word[index];
}
if (board[startX][startY] !== word[index]) {
return false;
}
visited[`${startX}${startY}`] = true;
// 试着去在上下左右四个方向去移动
for (let i = 0; i < 4; i++) {
let newX = startX + directionArr[i][0];
let newY = startY + directionArr[i][1];
// 符合范围 并且没有访问过
if (inArea(newX, newY) && !visited[`${newX}${newY}`] && search(newX, newY, index + 1)) {
return true;
}
}
// 当前值出去
visited[`${startX}${startY}`] = false;
return false;
}
for (let i = 0; i < board.length; i++) {
for (let j = 0; j < board[i].length; j++) {
if (search(i, j, 0)) {
return true;
}
}
}
return false;
};
老师好,我这个算法提交给leetcode, 最后两个测试用例没通过,说超时了。。
这里还有什么优化的办法吗
写回答
2回答
-
liuyubobobo
2020-06-25
抱歉,这是哪个问题?题号是多少?
032020-06-25 -
梦星魂1
提问者
2020-06-25
这个感觉也没做多余的遍历啊,找到解就提前退出了啊。。
00
相似问题
算法的学习方法
回答 1
lc203 递归写法复杂度分析
回答 1