zoukankan      html  css  js  c++  java
  • LeetCode-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.

    For example,
    Given board =

    [
      ["ABCE"],
      ["SFCS"],
      ["ADEE"]
    ]
    

    word = "ABCCED", -> returns true,
    word = "SEE", -> returns true,
    word = "ABCB", -> returns false.

    class Solution {
    public:
        bool Sub(vector<vector<char> >&board,string& word,int index,int i,int j,vector<vector<bool> > &used){
            if(index==word.length())return true;
            if(i>=1&&!used[i-1][j]){
                used[i-1][j]=true;
                if(board[i-1][j]==word[index]&&Sub(board,word,index+1,i-1,j,used))return true;
                used[i-1][j]=false;
            }
            if(i<board.size()-1&&!used[i+1][j]){
                used[i+1][j]=true;
                if(board[i+1][j]==word[index]&&Sub(board,word,index+1,i+1,j,used))return true;
                used[i+1][j]=false;
            }
            if(j>=1&&!used[i][j-1]){
                used[i][j-1]=true;
                if(board[i][j-1]==word[index]&&Sub(board,word,index+1,i,j-1,used))return true;
                used[i][j-1]=false;
            }
            if(j<board[0].size()-1&&!used[i][j+1]){
                used[i][j+1]=true;
                if(board[i][j+1]==word[index]&&Sub(board,word,index+1,i,j+1,used))return true;
                used[i][j+1]=false;
            }
            return false;
        }
        bool exist(vector<vector<char> > &board, string word) {
            // Note: The Solution object is instantiated only once and is reused by each test case.
            if(word=="")return false;
            if(board.size()==0||board[0].size()==0)return false;
            vector<vector<bool> > used;
            vector<bool> one;
            one.resize(board[0].size(),false);
            used.resize(board.size(),one);
            for(int i=0;i<board.size();i++){
                for(int j=0;j<board[i].size();j++){
                    used[i][j]=true;
                    if(board[i][j]==word[0]&&Sub(board,word,1,i,j,used))return true;
                    used[i][j]=false;
                }
            }
            return false;
        }
    };
    View Code
  • 相关阅读:
    Python学习——初识类与对象
    用Python代码实现贪心问题:最优合并问题、程序存储问题、最优服务次序问题
    爬虫解析库:XPath
    python基础学习之 模块导入
    python 数据结构
    深入理解vue中的slot与slot-scope
    BeanFactory和FactoryBean的区别简介
    Spring Boot 使用Caffeine缓存
    冒泡算法和递归算法demo
    AJPFX总结方法的特点
  • 原文地址:https://www.cnblogs.com/superzrx/p/3349490.html
Copyright © 2011-2022 走看看