El rango de movimiento del robot java

Hay una cuadrícula con m filas yn columnas en el suelo, desde la coordenada [0,0] a la coordenada [m-1, n-1]. Un robot comienza desde la cuadrícula de coordenadas [0, 0], puede mover una cuadrícula a la izquierda, derecha, arriba y abajo a la vez (no puede moverse fuera de la cuadrícula), ni puede ingresar las coordenadas de fila y columna. La suma de los dígitos es mayor que enrejado de k. Por ejemplo, cuando k es 18, el robot puede ingresar al cuadrado [35, 37] porque 3 + 5 + 3 + 7 = 18. Pero no puede entrar al cuadrado [35, 38] porque 3 + 5 + 3 + 8 = 19. ¿Cuántas cuadrículas puede alcanzar el robot?

Búsqueda profunda : recorra la matriz en una búsqueda profunda desde el punto de partida, controle el límite de búsqueda profunda y determine si el número y la posición del acceso actual son menores o iguales a k, y necesita una matriz de marcadores para registrar el acceso de cada ubicación para evitar el doble cálculo.

class Solution {
    public int movingCount(int m, int n, int k) {
        boolean[][] visited = new boolean[m][n];
        return dfs(0, 0, m, n, k, visited);
    }

    private int dfs(int x, int y, int m, int n, int k, boolean[][] visited) {
        if (x == m || y == n || sum(x) + sum(y) > k || visited[x][y]) {
            return 0;
        }
        visited[x][y] = true;
        return 1 + dfs(x + 1, y, m, n, k, visited) + dfs(x, y + 1, m, n, k, visited);
    }

    // 获取一个整数的数位和
    private int sum(int num) {
        int res = 0;
        while (num > 0) {
            res += num % 10;
            num /= 10;
        }
        return res;
    }
}
23 artículos originales publicados · elogiados 1 · visitas 464

Supongo que te gusta

Origin blog.csdn.net/qq_40492920/article/details/105528201
Recomendado
Clasificación