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
  • 相关阅读:
    计算机中的那些缩写词
    Linux 下dns的搭建
    html中的定位
    编程基础之流程控制
    linux中kvm的安装及快照管理
    zabbix 中监控windows 的typepref中的值
    详解Linux交互式shell脚本中创建对话框实例教程_linux服务器
    rhel7 单用户修改root密码
    Linux vim编辑器使用详解
    Linux下用ftp更新web内容!
  • 原文地址:https://www.cnblogs.com/sunshisonghit/p/4357290.html
Copyright © 2011-2022 走看看