Middle-题目108:79. Word Search

原创 2016年05月31日 19:58:45

题目原文:
Given a 2D board and a word, find if the word exists in the grid.
The word can be constructed from letters of sequentially adjacent cell, where “adjacent” cells are those horizontally or vertically neighboring. The same letter cell may not be used more than once.
For example,
Given board =
[
[‘A’,’B’,’C’,’E’],
[‘S’,’F’,’C’,’S’],
[‘A’,’D’,’E’,’E’]
]
word = “ABCCED”, -> returns true,
word = “SEE”, -> returns true,
word = “ABCB”, -> returns false.
题目大意:
给出一个矩阵,和一个单词,判断单词是否能由矩阵中一条路径连接出来。
题目分析:
一个简单的dfs,教科书式的dfs写法即可,搜到字母错误或者搜到数组边缘则退出,否则每次向四个方向搜索,注意这里的dfs是有返回值的,返回该条件下是否有解。
源码:(language:java)

public class Solution {
    public boolean exist(char[][] board, String word) {
        int row = board.length;
        if(row==0)
            return false;
        int col = board[0].length;
        boolean[][] visited = new boolean[row][col];
        for(int i = 0;i<row;i++) {
            for(int j=0;j<col;j++) {            
                if(word.charAt(0) == board[i][j]) {
                    if(dfs(board, i, j, visited, word, 0))
                        return true;  
                }
            }
        }
        return false;
    }

    private boolean dfs(char[][] board, int i, int j, boolean[][] visited, String word, int index) {
        if(index == word.length())
            return true;
        else if(i<0 || i>board.length-1 || j<0 || j>board[0].length-1 || word.charAt(index)!=board[i][j] || visited[i][j])
            return false;
        else {
            visited[i][j]=true;
            boolean result = dfs(board, i-1, j, visited, word, index+1) || dfs(board, i+1, j, visited, word, index+1) || dfs(board, i, j-1, visited, word, index+1) || dfs(board, i, j+1, visited, word, index+1);
            visited[i][j] = false;
            return result;
        }

    }
}

成绩:
13ms,beats 58.16%,众数14ms,14.58%
cmershen的碎碎念:
本题基本上是一个教科书式的dfs,区别是dfs带有返回值判断是否有解。

版权声明:完整版Leetcode题解请出门左转https://github.com/cmershen1/leetcode/tree/master/docs

Meet-in-the-middle思想的一些应用

 Meet in the middle(有时候也叫作split and merge)是一种用以获取足够高效解决方案的灵巧的思想。和分治思想非常类似,它将问题分割成两个部分,然后试着合并这两个子问...
  • lishuandao
  • lishuandao
  • 2015年10月16日 17:46
  • 2004

《Java150道面试题全集》

本文转载他人,自留作笔记用,请尊重原创作者。 1、面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: - 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽...
  • Man_Keung_CHEN
  • Man_Keung_CHEN
  • 2016年11月25日 08:30
  • 4775

Linux GDB程序调试工具使用简介

GDB概述GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工...
  • zhaobryant
  • zhaobryant
  • 2016年04月01日 18:38
  • 1812

LeetCode 79. Word Search 二维平面使用回溯法

79. Word Search Given a 2D board and a word, find if the word exists in the grid. The word ca...
  • wys2011101169
  • wys2011101169
  • 2017年06月13日 20:44
  • 159

(java)leetcode-79:Word Search

Word Search Given a 2D board and a word, find if the word exists in the grid. The word can be co...
  • xuyueqing1225
  • xuyueqing1225
  • 2017年07月26日 22:36
  • 50

79. Word Search

Given a 2D board and a word, find if the word exists in the grid. The word can be constructed from ...
  • zhouyanz
  • zhouyanz
  • 2016年03月22日 10:37
  • 119

LeetCode79——Word Search

LeetCode79——Word Search 题意: 在一个字母板(二维数组)上找到连续的一跳折线(或者直线),线上字母连起来可以可以凑成我们的目标单词。 思路: DFS应该没什么问题了。 往上...
  • zhangxiao93
  • zhangxiao93
  • 2015年11月17日 21:53
  • 1820

leetcode No79. Word Search

Question: Given a 2D board and a word, find if the word exists in the grid. The word can be constr...
  • u011391629
  • u011391629
  • 2016年08月03日 17:01
  • 421

【C++】【LeetCode】79. Word Search

题目Given a 2D board and a word, find if the word exists in the grid. The word can be constructed fro...
  • zjajgyy
  • zjajgyy
  • 2017年07月30日 23:23
  • 115

leetcode 79. Word Search | Java最短代码实现

Given a 2D board and a word, find if the word exists in the grid. The word can be constructed from ...
  • happyaaaaaaaaaaa
  • happyaaaaaaaaaaa
  • 2016年03月09日 12:45
  • 1436
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Middle-题目108:79. Word Search
举报原因:
原因补充:

(最多只允许输入30个字)