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
  • 相关阅读:
    样式超出设定宽度显示显示省略号
    客户端存在潜在危险request.from
    MenuStrip如何设置快捷键
    SVN的使用方法
    长串英文字符不换行的解决办法
    thickbox使用
    System.Web.UI.UserControl”,因此此处不允许
    C#中实现拖动无边框Form窗体和窗体的起始位置
    (转)Altera Forum精彩问答汇总
    (转)如何以32 bit的方式存取SDRAM?
  • 原文地址:https://www.cnblogs.com/sunshisonghit/p/4357290.html
Copyright © 2011-2022 走看看