Учитывая матрицу направления с L, R, U, D, в любой точке вы можете двигаться в направлении, которое записано над ячейкой [i, j]. Мы должны указать минимальное количество модификаций, чтобы достичь от [0, 0] до [N - 1, M - 1].
Example :-
R R D
L L L
U U R
Answer is 1, we can modify cell [1, 2] from L To D.
Какова будет временная сложность для (следующего) решения DFS? Обратите внимание, как мы сбрасываем флаг посещения каждый раз, когда исследуем узел. Это 4 ^ (м * н)? Пожалуйста, объясните вывод своим ответом. Спасибо!
// minimumModification(arr, 0, 0, new boolean[arr.length][arr[0].length])
private static int minimumModification(char[][] arr, int i, int j, boolean[][] visited)
{
if(i<0 || j<0 || i>=arr.length || j>= arr[0].length || visited[i][j])
return max;
if(i == arr.length-1 && j == arr[0].length-1)
return 0;
visited[i][j] = true;
int min = max;
int right = minimumModification(arr, i, j+1, visited);
int left = minimumModification(arr, i, j-1, visited);
int down = minimumModification(arr, i+1, j, visited);
int up = minimumModification(arr, i-1, j, visited);
if(right != max && arr[i][j] != 'R')
right++;
if(left != max && arr[i][j] != 'L')
left++;
if(down != max && arr[i][j] != 'D')
down++;
if(up != max && arr[i][j] != 'U')
up++;
min = Math.min(min, right);
min = Math.min(min, left);
min = Math.min(min, down);
min = Math.min(min, up);
visited[i][j] = false;
return min;
}
static final int max = Integer.MAX_VALUE;
источник вопроса: Leetcode https://leetcode.com/discuss/interview-question/476340/google-onsite-min-modifications