Leetcode 48、旋转图像
深度优先搜索(DFS)
题目要求原地旋转图像,所以不可以使用另一个数组来进行辅助旋转。使用DFS,把当前位置的一圈的元素进行替换,然后再进行下一圈的替换。
class Solution {
public void rotate(int[][] matrix) {
int m = matrix.length;
boolean[][] visited = new boolean[m][m];
for(int i = 0; i < m; i++) {
for(int j = 0; j < m; j++) {
if(!visited[i][j]) {
dfs(matrix, i, j, matrix[i][j], visited);
}
}
}
}
public void dfs(int[][] matrix, int row, int column, int pre, boolean[][] visited) {
if(row < 0 || row >= matrix.length || column < 0 || column >= matrix.length || visited[row][column]) {
return;
}
visited[row][column] = true;
int temp = matrix[column][matrix.length - row - 1];
matrix[column][matrix.length - row - 1] = pre;
dfs(matrix, column, matrix.length - row - 1, temp, visited);
}
}