LeetCode: Word Search
对于这道题。。我也无话可说了。。无奈了。。。
最开始就是用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相关推荐
- LeetCode() Word Search II
超时,用了tire也不行,需要再改. class Solution {class TrieNode { public:// Initialize your data structure here.Tr ...
- LeetCode 79. Word Search
原题链接在这里:https://leetcode.com/problems/word-search/ 题目: Given a 2D board and a word, find if the word ...
- 【DFS + Backtracking】LeetCode 212. Word Search II
LeetCode 212. Word Search II Solution1:我的答案 暴力搜索..基于第79题的答案,真的是非常之慢啊!!! 快的方法均是基于字典树的方法,真是复杂.. class ...
- 【DFS + Backtracking】LeetCode 79. Word Search
LeetCode 79. Word Search Solution1:我的答案 DFS + Backtracking class Solution { public:bool exist(vector ...
- 【Python3】 LeetCode 7月挑战题目之21 - Word Search
目录/Table of Content 第二十一天问:Word Search 题目&示例 (引用自 LeetCode) 解题思路 失败代码 (不完整,仅供自己存档) 参考代码 (引用自CSDN ...
- 79. Word Search
leetcod79题在矩阵中寻找某个单词 """ 79. Word Search MediumShare Given a 2D board and a word, fin ...
- LeetCode——Word Break
LeetCode--Word Break Question Given a non-empty string s and a dictionary wordDict containing a list ...
- LeetCode 33. Search in Rotated Sorted Array
问题链接 LeetCode 33. Search in Rotated Sorted Array 题目解析 给定一个 "升序" 的 无重复 数组,从中寻找目标值."升序& ...
- LeetCode 240. Search a 2D Matrix II
LeetCode 240. Search a 2D Matrix II Solution1: 为什么把第74题的代码改都不用改的拿过来就可以AC,一脸懵逼啊... class Solution { p ...
最新文章
- RNN代码解释pytorch
- [转载]安装Oracle11gR2先决条件检查失败的详细解决处理过程
- 聚类分析与相关算法(Kmeans等)详解
- E:Johnny and Grandmaster
- 1024电商项目的邮箱验证码与图形验证码功能模块
- oracle 移动日志文件,Oracle数据库移动数据文件、日志文件和控制文件
- kernel——make menuconfig的实现原理【转】
- ps钢笔工具的一些快捷键操作(小白请进)
- 多线程问题,实现三个线程顺序循环输出123123123...
- deepin关机卡桌面_有了MyDock,我也有了一个MacBook桌面
- 通过迅雷下载谷歌浏览器下载的内容
- 论文投稿指南——中文核心期刊推荐(物理学)
- 软件测试 质量管控,软件测试之质量管理入门
- UVa11400 Lighting System Design
- synplify pro和lattice lse综合同一段verilog代码时的区别
- 【已解决】阿里云网站备案流程,万网网站备案,公司网站备案被注销了怎么办?
- 【MemoryCompression内存占用过高】
- 300条物流术语翻译
- CEC设备连接和寻址
- HDU2187悼念512汶川大地震遇难同胞
热门文章
- linux虚拟机系统的复制或克隆后续问题解决!
- Spring注解和XML配置文件孰优孰劣
- JavaScript 演练(8). 对象成员、类成员(原型、非原型)
- Go语言Web框架gwk介绍 (四)
- ORA-00845 方案解决
- windows2k服务和进程详解
- 手工查杀myplayer病毒
- Mathpix图片转LaTeX,Word快速插入LaTeX公式教程
- python输出总字符个数_python每次处理固定个数的字符的方法总结
- android 多线程类,Android 多线程处理之多线程用法大集合