- Rotate Image
You are given an n x n 2D matrix representing an image.
Rotate the image by 90 degrees (clockwise).
Example
Example 1:
Input:[[1,2],[3,4]]
Output:[[3,1],[4,2]]
Example 2:
Input:[[1,2,3],[4,5,6],[7,8,9]]
Output:[[7,4,1],[8,5,2],[9,6,3]]
Challenge
Do it in-place.
解法1:
先按主对角线反转,然后列按中轴线反转。
比如说
input = [[1,2,3], [4,5,6],[7,8,9]],先反转成[[]1,4,7],[2,5,8],[3,6,9]],再反转成[[7,4,1],[8,5,2],[9,6,3]]。
注意:
- 按主对角线反转的循环是
for (int i = 1; i < rowSize; ++i) {
for (int j = 0; j < i; ++j) { //注意j<i
class Solution {
public:
/**
* @param matrix: a lists of integers
* @return: nothing
*/
void rotate(vector<vector<int>> &matrix) {
int rowSize = matrix.size();
if (rowSize == 0) return;
int colSize = matrix[0].size();
for (int i = 1; i < rowSize; ++i) {
for (int j = 0; j < i; ++j) {
swap(matrix[i][j], matrix[j][i]);
}
}
for (int i = 0; i < colSize / 2; ++i) {
for (int j = 0; j < rowSize; ++j) {
swap(matrix[j][i], matrix[j][colSize - 1 - i]);
}
}
}
};
代码同步在
https://github.com/luqian2017/Algorithm
本文介绍了一种高效的矩阵旋转算法,用于将n x n的二维矩阵顺时针旋转90度。通过先沿主对角线翻转,再沿垂直中轴线翻转的方法,实现了原地旋转,节省了额外的空间。
200

被折叠的 条评论
为什么被折叠?



