1. 题目
给定一幅由N × N矩阵表示的图像,其中每个像素的大小为4字节,编写一种方法,将图像旋转90度。
不占用额外内存空间能否做到?
示例 1:
给定 matrix =
[[1,2,3],[4,5,6],[7,8,9]
],原地旋转输入矩阵,使其变为:
[[7,4,1],[8,5,2],[9,6,3]
]示例 2:
给定 matrix =
[[ 5, 1, 9,11],[ 2, 4, 8,10],[13, 3, 6, 7],[15,14,12,16]
], 原地旋转输入矩阵,使其变为:
[[15,13, 2, 5],[14, 3, 4, 1],[12, 6, 8, 9],[16, 7,10,11]
]
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/rotate-matrix-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
类似题目:LeetCode 5776. 判断矩阵经轮转后是否一致
2.1 两次遍历
class Solution {
public:void rotate(vector<vector<int>>& matrix) {int i, j, a, b;for(i = 0; i < matrix.size(); ++i){ //对角线交换for(j = 0; j < i; ++j)swap(matrix[i][j], matrix[j][i]);}for(i = 0; i < matrix.size(); ++i){ //每行反转a = 0, b = matrix[0].size()-1;while(a < b)swap(matrix[i][a++], matrix[i][b--]);}}
};
2.2 一次遍历
class Solution {
public:void rotate(vector<vector<int>>& matrix) {int i, j, n = matrix.size();for(i = 0; i < n/2; ++i){for(j = i; j < n-i-1; ++j){swp(matrix[i][j], matrix[n-1-j][i]);swp(matrix[n-1-j][i], matrix[n-1-i][n-1-j]);swp(matrix[n-1-i][n-1-j], matrix[j][n-1-i]);}}}inline void swp(int&a, int&b){// b = a^b;// a = a^b;// b = a^b;//或者一行代替a ^= b ^= a ^= b;}
};