老师好,我写的这个算法超时了,有啥优化办法吗

来源: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

抱歉,这是哪个问题?题号是多少?

0
3
liuyubobobo
回复
梦星魂1
继续加油!:)
2020-06-25
共3条回复

梦星魂1

提问者

2020-06-25

这个感觉也没做多余的遍历啊,找到解就提前退出了啊。。

0
0

玩转算法面试-- Leetcode真题分门别类讲解

课程配套大量BAT面试真题,高频算法题解析,强化训练

7408 学习 · 1150 问题

查看课程