zoukankan      html  css  js  c++  java
  • Word Search

    Word Search

    问题:

    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.

    思路:

      dfs + 回溯

    我的代码:

    public class Solution {
        public boolean exist(char[][] board, String word) {
            if(board == null || board.length == 0 || board[0].length == 0 || word == null || word.length() == 0)  return false;
            int row = board.length;
            int col = board[0].length;
            boolean[][] isVisited = new boolean[row][col];
            for(int i = 0; i < row; i++)
            {
                for(int j = 0; j < col; j++)
                {
                    if(board[i][j] == word.charAt(0))
                    {
                        isVisited[i][j] = true;
                        if(helper(board, word.substring(1), i, j, isVisited, row, col))    return true;
                        isVisited[i][j] = false;
                    }
                }
            }
            return false;
        }
        public boolean helper(char[][] board, String word, int i, int j, boolean[][] isVisited, int row, int col)
        {
            if(word == null || word.length() == 0)  return true;
            char c = word.charAt(0);
            //left
            if(j > 0 && isVisited[i][j-1] == false && board[i][j-1] == c)
            {
                isVisited[i][j-1] = true;
                if(helper(board, word.substring(1), i, j-1, isVisited, row, col)) return true;
                isVisited[i][j-1] = false;
            }
            //right
            if(j < col - 1 && isVisited[i][j+1] == false && board[i][j+1] == c)
            {
                isVisited[i][j+1] = true;
                if(helper(board, word.substring(1), i, j+1, isVisited, row, col)) return true;
                isVisited[i][j+1] = false;
            }
            //up
            if(i > 0 && isVisited[i-1][j] == false && board[i-1][j] == c)
            {
                isVisited[i-1][j] = true;
                if(helper(board, word.substring(1), i-1, j, isVisited, row, col)) return true;
                isVisited[i-1][j] = false;
            }
            //down
            if(i < row-1 && isVisited[i+1][j] == false && board[i+1][j] == c)
            {
                isVisited[i+1][j] = true;
                if(helper(board, word.substring(1), i+1, j, isVisited, row, col)) return true;
                isVisited[i+1][j] = false;
            }
            return false;
        }
    }
    View Code
  • 相关阅读:
    看完了红米5 Plus发布会,我觉得魅蓝Note6降价降多了
    红米5/红米5 Plus逼出最强魅蓝Note6?降价后已成性价比神机
    java.lang.NoClassDefFoundError: org/apache/ibatis/mapping/DatabaseIdProvider
    mac tree命令
    spring boot集成dubbo
    玩转Spring Boot 集成Dubbo
    Linux下复制粘贴快捷键
    用创业舞动飞扬的青春
    SpringMVC 学习笔记(一) Hello World
    从 Kubernetes 谈容器网络
  • 原文地址:https://www.cnblogs.com/sunshisonghit/p/4357290.html
Copyright © 2011-2022 走看看