对于这道题。。我也无话可说了。。无奈了。。。

最开始就是用dfs做,写出来之后怎么测试都是time limit exceeded。。。。上网看大家的解决方法都一样啊,都是上下左右检查一遍。。。。我这个郁闷啊

但是后来我检查出我的代码有个严重的问题。。用dfs在回溯的时候,我们没有把这个点的visit标记回复为false。。因此这里一定要注意

如果在dfs时候将原来的状态做了改变,一定要在回溯结束的时候将状态改变回来。。。。

就像做subset时候一样,用tmp保留当前的状态,如果不满足条件回溯的时候,一样要将这一轮添加进去的元素删除掉!!!!

但即使发现这个问题,依然是time limit exceeded。。。这个郁闷啊。。我和网上大家做法一样,为啥我就不行。。

后来我终于发现了。。。

我最开始想的是,每次遇到一个和word首字符一样的字符就开始做dfs,用visited标记是否访问过。那么下一次做的时候我应该是这个visited数组清空掉。。我很聪明的在每次循环里重新new出一个boolean数组。。。。当数据很大时,这个数据就很大,就要很多时间。。。。。。所以发生了超时。。

结合我上面提到的dfs很关键的一点,每次dfs结束之后,visited会自己就回复到最初始的状态!!!!!!

 1 public static boolean exist(char[][] board, String word) {
 2         if (board == null) return false;
 3         if (word.length() == 0) return true;
 4         int row = board.length;
 5         if (row == 0) return false;
 6         int col = board[0].length;
 7         if (col == 0) return false;
 8         boolean visited[][] = new boolean[board.length][board[0].length];
 9         for (int i=0; i<row; i++) {
10             for (int j=0; j<col; j++) {
11 //                boolean visited[][] = new boolean[board.length][board[0].length];
12                 if (dfs(board, i, j, word, 0, visited))
13                     return true;
14             }
15         }
16         return false;
17     }
18
19     public static boolean dfs(char[][] board, int i, int j, String word, int position, boolean visited[][]) {
20         if (i<0 || i>=board.length || j<0 || j>=board[0].length) return false;
21         if (visited[i][j] || board[i][j] != word.charAt(position)) return false;
22         if (position == word.length()-1) return true;
23
24         visited[i][j] = true;
25         boolean result = dfs(board, i-1, j, word, position+1, visited) ||
26                          dfs(board, i, j+1, word, position+1, visited) ||
27                          dfs(board, i+1, j, word, position+1, visited) ||
28                          dfs(board, i, j-1, word, position+1, visited);
29         visited[i][j] = false;
30         return result;
31     }

。。。

转载于:https://www.cnblogs.com/longhorn/p/3533070.html

LeetCode: Word Search相关推荐

  1. LeetCode() Word Search II

    超时,用了tire也不行,需要再改. class Solution {class TrieNode { public:// Initialize your data structure here.Tr ...

  2. LeetCode 79. Word Search

    原题链接在这里:https://leetcode.com/problems/word-search/ 题目: Given a 2D board and a word, find if the word ...

  3. 【DFS + Backtracking】LeetCode 212. Word Search II

    LeetCode 212. Word Search II Solution1:我的答案 暴力搜索..基于第79题的答案,真的是非常之慢啊!!! 快的方法均是基于字典树的方法,真是复杂.. class ...

  4. 【DFS + Backtracking】LeetCode 79. Word Search

    LeetCode 79. Word Search Solution1:我的答案 DFS + Backtracking class Solution { public:bool exist(vector ...

  5. 【Python3】 LeetCode 7月挑战题目之21 - Word Search

    目录/Table of Content 第二十一天问:Word Search 题目&示例 (引用自 LeetCode) 解题思路 失败代码 (不完整,仅供自己存档) 参考代码 (引用自CSDN ...

  6. 79. Word Search

    leetcod79题在矩阵中寻找某个单词 """ 79. Word Search MediumShare Given a 2D board and a word, fin ...

  7. LeetCode——Word Break

    LeetCode--Word Break Question Given a non-empty string s and a dictionary wordDict containing a list ...

  8. LeetCode 33. Search in Rotated Sorted Array

    问题链接 LeetCode 33. Search in Rotated Sorted Array 题目解析 给定一个 "升序" 的 无重复 数组,从中寻找目标值."升序& ...

  9. LeetCode 240. Search a 2D Matrix II

    LeetCode 240. Search a 2D Matrix II Solution1: 为什么把第74题的代码改都不用改的拿过来就可以AC,一脸懵逼啊... class Solution { p ...

最新文章

  1. RNN代码解释pytorch
  2. [转载]安装Oracle11gR2先决条件检查失败的详细解决处理过程
  3. 聚类分析与相关算法(Kmeans等)详解
  4. E:Johnny and Grandmaster
  5. 1024电商项目的邮箱验证码与图形验证码功能模块
  6. oracle 移动日志文件,Oracle数据库移动数据文件、日志文件和控制文件
  7. kernel——make menuconfig的实现原理【转】
  8. ps钢笔工具的一些快捷键操作(小白请进)
  9. 多线程问题,实现三个线程顺序循环输出123123123...
  10. deepin关机卡桌面_有了MyDock,我也有了一个MacBook桌面
  11. 通过迅雷下载谷歌浏览器下载的内容
  12. 论文投稿指南——中文核心期刊推荐(物理学)
  13. 软件测试 质量管控,软件测试之质量管理入门
  14. UVa11400 Lighting System Design
  15. synplify pro和lattice lse综合同一段verilog代码时的区别
  16. 【已解决】阿里云网站备案流程,万网网站备案,公司网站备案被注销了怎么办?
  17. 【MemoryCompression内存占用过高】
  18. 300条物流术语翻译
  19. CEC设备连接和寻址
  20. HDU2187悼念512汶川大地震遇难同胞

热门文章

  1. linux虚拟机系统的复制或克隆后续问题解决!
  2. Spring注解和XML配置文件孰优孰劣
  3. JavaScript 演练(8). 对象成员、类成员(原型、非原型)
  4. Go语言Web框架gwk介绍 (四)
  5. ORA-00845 方案解决
  6. windows2k服务和进程详解
  7. 手工查杀myplayer病毒
  8. Mathpix图片转LaTeX,Word快速插入LaTeX公式教程
  9. python输出总字符个数_python每次处理固定个数的字符的方法总结
  10. android 多线程类,Android 多线程处理之多线程用法大集合