博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
word search 此题若会,所有dfs矩阵全会
阅读量:7078 次
发布时间:2019-06-28

本文共 3278 字,大约阅读时间需要 10 分钟。

[LeetCode] Word SearchGiven 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 =[  ["ABCE"],  ["SFCS"],  ["ADEE"]]word = "ABCCED", -> returns true,word = "SEE", -> returns true,word = "ABCB", -> returns false.递归Java:public class Solution {    public boolean exist(char[][] board, String word) {        // Start typing your Java solution below        // DO NOT write main() function        if(word.length() == 0)   return true;        int h = board.length;        if(h == 0)    return false;        int w = board[0].length;        boolean[][] flag = new boolean[h][w];                for(int i = 0; i < h; i++){            for(int j = 0; j < w; j++){                if(word.charAt(0) == board[i][j]){                    if(func(board, word, 0, w, h, j, i, flag)) return true;                }            }        }                return false;    }        public boolean func(char[][] board, String word, int spos, int w, int h, int x, int y, boolean[][] flag){        if(spos == word.length())  return true;        if(x < 0 || x >= w || y < 0 || y >= h)   return false;        if(flag[y][x] || board[y][x] != word.charAt(spos))   return false;                flag[y][x] = true;                // up        if(func(board, word, spos + 1, w, h, x, y-1, flag)){            return true;        }        // down        if(func(board, word, spos + 1, w, h, x, y+1, flag)){            return true;        }        // left        if(func(board, word, spos + 1, w, h, x-1, y, flag)){            return true;        }        // right        if(func(board, word, spos + 1, w, h, x+1, y, flag)){            return true;        }                flag[y][x] = false;                return false;    }}c++class Solution {public:    bool exist(vector
> &board, string word) { // Start typing your C/C++ solution below // DO NOT write int main() function if(word.size() == 0) return true; int h = board.size(); if(h == 0) return false; int w = board[0].size(); vector
> flag(h, vector
(w, false)); for(int i = 0; i < h; i++){ for(int j = 0; j < w; j++){ if(board[i][j] == word[0]){ if(func(board, word, w, h, j, i, 0, flag)) return true; } } } return false; } bool func(vector
> board, string word, int w, int h, int x, int y, int spos, vector
> flag){ if(spos == word.size()) return true; if(x < 0 || x >= w || y < 0 || y >= h) return false; if(flag[y][x] || word[spos] != board[y][x]) return false; flag[y][x] = true; // up if(func(board, word, w, h, x, y - 1, spos + 1, flag)){ return true; } if(func(board, word, w, h, x, y + 1, spos + 1, flag)){ return true; } if(func(board, word, w, h, x - 1, y, spos + 1, flag)){ return true; } if(func(board, word, w, h, x + 1, y, spos + 1, flag)){ return true; } flag[y][x] = false; return false; }};

 

转载于:https://www.cnblogs.com/leetcode/p/3555991.html

你可能感兴趣的文章
Linux发生问题怎么处理啊?建议流程是这样...[鸟哥的Linux私房菜]
查看>>
Mysql学习总结(6)——MySql之ALTER命令用法详细解读
查看>>
大型网站技术架构(五)网站高可用架构
查看>>
SVN学习总结(2)——SVN冲突解决
查看>>
MySQL基本
查看>>
<org manual>翻译--3.2 列的宽度与对齐
查看>>
我的友情链接
查看>>
《未测试》如何使用自己已经编译过的lamp安装cacti nagios zabbix
查看>>
SCVMM 2012 R2之为云分配虚拟机
查看>>
中国企业的等级制度
查看>>
pfSense安装和配置pfBlockerNg
查看>>
Ubuntu 14.04 X64 下安装Appcelerator Titanium Studio。
查看>>
R.java was modified manually! Reverting to generated version!(R文件丢失异常原因汇总)
查看>>
ASP.NET MVC Model验证(一)
查看>>
opensuse12.1安装VirtualBox
查看>>
获取系统特殊文件
查看>>
C语言中的for命令
查看>>
Hash算法
查看>>
urlWithString、fileURLWithPath的区别
查看>>
Elasticsearch
查看>>