LeetCode-探索-初级算法-数组-11. 旋转图像(个人做题记录,不是习题讲解)
LeetCode探索-初级算法:https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/
- 旋转图像
-
语言:java
-
思路:不懂,主要不知道怎么通过i和j设计要获取的坐标。
-
参考代码1(0ms):
https://blog.csdn.net/biezhihua/article/details/79653162
class Solution { public void rotate(int[][] matrix) { int length = matrix.length; // 调换对角元素 for (int i = 0; i < length; i++) { for (int j = 0; j < length - i; j++) { int tmp = matrix[i][j]; matrix[i][j] = matrix[length - j - 1][length - i - 1]; matrix[length - j - 1][length - i - 1] = tmp; } } // 调换列元素 for (int i = 0; i < length; i++) { for (int j = 0; j < length / 2; j++) { int tmp = matrix[j][i]; matrix[j][i] = matrix[length - j - 1][i]; matrix[length - j - 1][i] = tmp; } } } }
-
参考代码2(0ms):LeetCode给出的0ms代码
class Solution { public void rotate(int[][] matrix) { if (matrix.length != matrix[0].length) return; find(matrix,0,0); } public void find(int[][] matrix, int i, int j) { if (i >= matrix.length) { return; } int v = matrix[matrix.length-1-j][i]; if (j == matrix.length - 1) { find(matrix, i+ 1, 0); } else { find(matrix, i, j + 1); } matrix[i][j] = v; } }
-
参考代码3(0ms):
https://blog.csdn.net/afei__/article/details/84242702
class Solution { public void rotate(int[][] matrix) { int len = matrix.length; for (int i = 0; i < len / 2; i++) { int start = i; // 当前环的起始下标(横纵均相等) int end = len - i - 1; // 当前环的终点下标(横纵均相等) for (int j = 0; j < end - start; j++) { int temp = matrix[start][start + j]; matrix[start][start + j] = matrix[end - j][start]; matrix[end - j][start] = matrix[end][end - j]; matrix[end][end - j] = matrix[start + j][end]; matrix[start + j][end] = temp; } } } }
-
参考后写:
class Solution { public void rotate(int[][] matrix) { int len = matrix.length; for(int i = 0;i < len/2;++i){ int start = i; int end = len - 1 - i; for(int j = 0;j < end-start;++j){ int tmp = matrix[start][start+j]; matrix[start][start+j] = matrix[end-j][start]; matrix[end-j][start] = matrix[end][end-j]; matrix[end][end-j] = matrix[start+j][end]; matrix[start+j][end] = tmp; } } } }