136 Palavra de pesquisa (leetcode 79)

Um: solução para o problema

Não há habilidade neste tópico, é usar uma letra como centro e comparar recursivamente acima, abaixo, esquerda e direita.

Tempo: O (m * n * 3 ^ k), Espaço: O (m * n)

É um pouco estranho que no leetcode, o mesmo programa, o código Java possa passar, mas o código C ++ não possa passar. Mas ele pode passar perfeitamente no lintcode!, Indicando que o teste do leetcode ainda é um pouco problemático

Dois: exemplos de código completos (versão C ++ e versão Java)

C ++:

classe Solução 
{ 
private :
     bool existe (vetor <vetor < char >> & board, vetor <vetor < bool >> visitado, int i, int j, int idx, cadeia de caracteres da palavra) 
    { 
        if (idx == word.length () ) retornar  verdadeiro ;
        if (i < 0 || i> = board.size () || j < 0 || j> = board [ 0 ] .size () || visitou [i] [j] || board [i] [j ]! = palavra [idx])
             retorna  falso ; 
        visitado [i] [j] =verdadeiro ;
        bool existiu = existe (quadro, visitado, i- 1 , j, idx + 1 , palavra) || 
            existe (quadro, visitado, i + 1 , j, idx + 1 , palavra) || 
            existe (quadro, visitado, i, j - 1 , idx + 1 , palavra) || 
            existe (quadro, visitado, i, j + 1 , idx + 1 , palavra); 
        visitado [i] [j] = falso ; 
        
        retorno existia; 
    } 
public :
     bool existe (vetor <vetor < char >> & board, stringpalavra) 
    { 
        if (board.size () == 0 || board [ 0 ] .size () == 0 ) retorna  false ;
        int m = board.size ();
        int n = placa [ 0 ] .size (); 
        vetor <vetor < bool >> visitado (m, vetor < bool > (n, false )); 

        for ( int i = 0 ; i <m; i ++ )
             for ( int j = 0 ; j <n; j ++ )
                 se(existe (quadro, visitado, i, j, 0 , palavra))
                     return  true ;
        retornar  falso ; 
    } 
};

Java:

classe Solution 
    { 
        private boolean existe ( char [] [] board, boolean [] [] visitou, int i, int j, int idx, String word) 
        { 
             if (idx == word.length ()) retorna  true ;
             if (i < 0 || i> = board.length || j < 0 || j> = board [ 0 ] .length || visitou [i] [j] || board [i] [j]! = word .charAt (idx))
                  retorna  false ; 
             visitado [i] [j] = verdadeiro ; 
             booleano existia= existe (quadro, visitado, i- 1 , j, idx + 1 , palavra) || 
                     existe (quadro, visitado, i + 1 , j, idx + 1 , palavra) || 
                     existe (quadro, visitado, i, j - 1 , idx + 1 , palavra) || 
                     existe (quadro, visitado, i, j + 1 , idx + 1 , palavra); 
             visitado [i] [j] = falso ; 
             
             retorno existia; 
        } 
        
        public boolean existe ( char [] [] board, String word) 
        { 
             if (board == null|| board.length == 0 || quadro [ 0 ] == nulo || board [ 0 ] .length == 0 ) retorna  false ;
             int m = comprimento da placa;
             int n = placa [ 0 ]. comprimento; 
             booleano [] [] visitado = novo booleano [m] [n];
             for ( int i = 0 ; i <m; i ++ )
                  for ( int j = 0 ; j <n; j ++ )
                      if (existir (fórum, visitado, i, j,0 , palavra))
                          retornar  verdadeiro ;
             retornar  falso ;        
        } 
    }

 

Acho que você gosta

Origin www.cnblogs.com/repinkply/p/12714484.html
Recomendado
Clasificación