题解 | #顺时针旋转矩阵#
顺时针旋转矩阵
https://www.nowcoder.com/practice/2e95333fbdd4451395066957e24909cc
基本思路
顺时针旋转矩阵后,第一行变成最后一列,最后一行变成第一列,可以创建一个新的数组,然后遍历原数组中的每行放到新数组的对应列中,最后返回新的数组,这样空间复杂度是O(n^2)。
或者观察顺时针旋转矩阵的规律,发现顺时针旋转矩阵就是矩阵转置后再将每行逆序得到的,而矩阵转置就是对角线元素互换,因此可以先将原矩阵的对角线元素互换,然后再将每行逆序,就得到了顺时针旋转矩阵。
参考
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param mat int整型二维数组 * @param n int整型 * @return int整型二维数组 */ public int[][] rotateMatrix (int[][] mat, int n) { // write code here int temp; for (int i = 1; i < mat.length; ++i) { // 对角线元素互换 for (int j = 0; j < i; ++j) { temp = mat[i][j]; mat[i][j] = mat[j][i]; mat[j][i] = temp; } } int left, right; for (int i = 0; i < mat.length; ++i) { // 每一行数组逆序 left = 0; right = mat[i].length - 1; while (left < right) { temp = mat[i][left]; mat[i][left] = mat[i][right]; mat[i][right] = temp; left++; right--; } } return mat; } }