class Solution {
//the key is to find the independent circle in the matrix
public:
void rotate(vector<vector<int> > &matrix) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int n = matrix.size();
for (int i = 0; i < n/2; ++i)
{
for (int j = i; j < n-1-i; ++j)
{
int tmp = matrix[i][j];
matrix[i][j] = matrix[n-1-j][i];
matrix[n-1-j][i] = matrix[n-1-i][n-1-j];
matrix[n-1-i][n-1-j] = matrix[j][n-1-i];
matrix[j][n-1-i] = tmp;
}
}
}
};
second time
class Solution {
//consider each loop in each sub square
public:
void rotateUtil(vector<vector<int> >& matrix, int start, int end)
{
if(start >= end) return;
for(int i = 0; i < end-start; ++i)
{
int tmp = matrix[start][start+i];
matrix[start][start+i] = matrix[end-i][start];
matrix[end-i][start] = matrix[end][end-i];
matrix[end][end-i] = matrix[start+i][end];
matrix[start+i][end] = tmp;
}
rotateUtil(matrix, start+1, end-1);
}
void rotate(vector<vector<int> > &matrix) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
rotateUtil(matrix, 0, matrix.size()-1);
}
};
本文提供了一种高效的矩阵旋转算法实现,通过遍历矩阵的独立圈层并进行元素的循环交换,实现了矩阵的90度顺时针旋转。该方法避免了使用额外的空间,降低了算法的时间复杂度。
528

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



