Leecode78 word-search

题目描述

给出一个二维字符数组和一个单词,判断单词是否在数组中出现,
单词由相邻单元格的字母连接而成,相邻单元指的是上下左右相邻。同一单元格的字母不能多次使用。
例如:
给出的字符数组=
[↵ [“ABCE”],↵ [“SFCS”],↵ [“ADEE”]↵]
单词 =“ABCCED”, -> 返回 true,
单词 =“SEE”, ->返回 true,
单词 =“ABCB”, -> 返回 false.

java 代码

public class Solution {
    public boolean exist(char[][] board, String word) {
       if(board == null){return false;}
        boolean used [][] = new boolean [board.length][board[0].length];
        char [] words = word.toCharArray();
        for(int i =0;i < board.length;i++){
            for(int j =0; j < board[0].length;j++){
                if(existHelp(board,used,i,j,words,0)){
                    return true;
                }
            }
        }
        return false;
        
    }
    //给一二维字符集 以及访问记录 问从 x y 处 能否找到 words index之后的字符 (包含index)
    public boolean existHelp(char [][] board,boolean [][] used,int x,int y,char [] words,int index){
        //如果index 超出了words下标 说明已经搜索完了全部
        if(index == words.length){return true;}
        /*如果能返回true 必须是
            1.该坐标没有越界
            2.该坐标的字符和words[idnex]一致,而且之前没有使用过 
            3.相邻的四个方向之一,可以找到index之后的字符
           */
       if(x >= board.length || x <0 || y >= board[0].length || y<0 || used[x][y] || board[x][y] != words[index]){return false;}
        
        used[x][y] = true;
        //四个方向 任意一个为起点 可以找到index之后的串,能够连续  都可以
        if(existHelp(board,used,x-1,y,words,index+1)){
            return true;
        }
        if(existHelp(board,used,x+1,y,words,index+1)){
            return true;
        }
        if(existHelp(board,used,x,y-1,words,index+1)){
            return true;
        }
        if(existHelp(board,used,x,y+1,words,index+1)){
            return true;
        }       
        used[x][y] = false;
       //四个方向都不行 表示从x y 找不到
        return false;
    }
}
发布了84 篇原创文章 · 获赞 0 · 访问量 1030

猜你喜欢

转载自blog.csdn.net/weixin_40300702/article/details/105584040
今日推荐