136検索ワード(leetcode 79)

1:問題の解決策

このトピックにはスキルはありません。文字を中心として使用し、再帰的に上、下、左、右を比較します。

時間:O(m * n * 3 ^ k)、スペース:O(m * n)

leetcodeでは、同じプログラム、Javaコードは通過できますが、C ++コードは通過できないのは少し奇妙です。しかし、lintcode!を完全に通過できます。これは、リートコードテストがまだ少しバグがあることを示しています。

2:完全なコード例(C ++バージョンとJavaバージョン)

C ++:

class Solution 
{ 
private bool exist(vector <vector < char >>&board、vector <vector < bool >> Visited int i、int j、int idx、string word)
    { 
        if(idx == word.length() )trueを返し ますif(i < 0 || i> = board.size()|| j < 0 || j> = board [ 0 ] .size()|| visited [i] [j] || board [i] [j ]!= word [idx])
             return  false ; 
        訪問した[i] [j] =;
        bool existed = exist(board、visited、i- 1、j、idx + 1、word)|| 
            exist(board、visited、i + 1、j、idx + 1、word)|| 
            exist(board、visited、i、j - 1、idx + 1、word)|| 
            exist(board、visited、i、j + 1、idx + 1 1 、word); 
        Visited [i] [j] = false ; 
        
        リターンが存在した; 
    } 
public bool exist(vector <vector < char >>&board、stringword)
    { 
        if(board.size()== 0 || board [ 0 ] .size()== 0return  false ;
        int m = board.size();
        int n = board [ 0 ] .size(); 
        vector <vector < bool >> Visited(m、vector < bool >(n、false )); 

        forint i = 0 ; i <m; i ++ forint j = 0 ; j <n; j ++ if(exist(board、visited、i、j、0 、word))
                     return  true ;
        falseを返し ます
    } 
};

Java:

class Solution 
    { 
        private boolean exist(char [] [] board、boolean [] [] Visited int i、int j、int idx、String word)
        { 
             if(idx == word.length())return  true ;
             if(i < 0 || i> = board.length || j < 0 || j> = board [ 0 ] .length || visited [i] [j] || board [i] [j]!= word .charAt(idx))
                  return  false ; 
             Visited [i] [j] = true ; 
             ブールが存在しました= exist(board、visited、i- 1、j、idx + 1、word)|| 
                     exist(board、visited、i + 1、j、idx + 1、word)|| 
                     exist(board、visited、i、j - 1、idx + 1、word)|| 
                     exist(board、visited、i、j + 1、idx + 1 1 、word); 
             Visited [i] [j] = false ; 
             
             リターンが存在した; 
        } 
        
        public boolean exist(char [] [] board、String word)
        { 
             if(board == null|| board.length == 0 || ボード[ 0 ] == null || board [ 0 ] .length == 0falseを返し ますint m = board.length;
             int n = board [ 0 ] .length; 
             boolean [] []訪問済み = 新しいboolean [m] [n];
             forint i = 0 ; i <m; i ++ forint j = 0 ; j <n; j ++ if(exist(board、visited、i、j、0 、word))
                          trueを返し ますfalseを返し ます
        } 
    }

 

おすすめ

転載: www.cnblogs.com/repinkply/p/12714484.html