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()== 0)return false ; int m = board.size(); int n = board [ 0 ] .size(); vector <vector < bool >> Visited(m、vector < bool >(n、false )); for(int i = 0 ; i <m; i ++ ) for(int 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 == 0)falseを返し ます。 int m = board.length; int n = board [ 0 ] .length; boolean [] []訪問済み = 新しいboolean [m] [n]; for(int i = 0 ; i <m; i ++ ) for(int j = 0 ; j <n; j ++ ) if(exist(board、visited、i、j、0 、word)) trueを返し ます。 falseを返し ます。 } }