sopa de letras 00

enlace de tema

búsqueda de palabras

Tema Descripción



punto importante

  • 1 <= metro, norte <= 6
  • el tablero y la palabra solo consisten en letras mayúsculas y minúsculas en inglés
  • No se permite el uso repetido de letras en la misma celda

Ideas de solución

  • Para buscar si está contenida la palabra completa, lo primero que se nos viene a la mente es usar el recorrido primero en profundidad, es necesario recorrer primero toda la matriz, encontrar la posición de la grilla donde el carácter es el mismo que el primero carácter en la palabra, y luego realice una búsqueda profunda en las cuadrículas adyacentes, hasta que se encuentre la palabra completa
  • Use dp para almacenar si cada cuadrícula se ha utilizado en este dfs, para asegurarse de que las letras en la misma celda no puedan reutilizarse

el código

class Solution {
    
    
    private int targetLength;

    public boolean exist(char[][] board, String word) {
    
    
        int row = board.length, col = board[0].length;
        targetLength = word.length();
        boolean[][] visited = new boolean[row][col];
        for (int i = 0; i < row; i++) {
    
    
            for (int j = 0; j < col; j++) {
    
    
                if (dfs(board, word, visited, 0, i, j)) {
    
    
                    return true;
                }
            }
        }
        return false;
    }

    public boolean dfs(char[][] board, String word, boolean[][] visited, int depth, int x, int y) {
    
    
        // 越界
        if (x < 0 || x >= board.length || y < 0 || y >= board[0].length) {
    
    
            return false;
        }
        // 字符不满足
        if (visited[x][y] || board[x][y] != word.charAt(depth)) {
    
    
            return false;
        }
        if (depth + 1 == targetLength) {
    
    
            return true;
        }
        visited[x][y] = true;
        boolean res = dfs(board, word, visited, depth + 1, x - 1, y)
                || dfs(board, word, visited, depth + 1, x + 1, y)
                || dfs(board, word, visited, depth + 1, x, y - 1)
                || dfs(board, word, visited, depth + 1, x, y + 1);
        visited[x][y] = false;
        return res;
    }
}

punto clave

  • La idea del recorrido primero en profundidad
  • ¿Cuándo se debe podar para mejorar la eficiencia?

Supongo que te gusta

Origin blog.csdn.net/weixin_51628158/article/details/130865155
Recomendado
Clasificación