一、题目
二、代码
class Solution
{
public:
//按照规律 两两交换罢了 第n列环岛第n行 从下往上排列
void rotate(vector<vector<int>>& matrix)
{
int i,j;
std::cout<<"matrix.size() "<<matrix.size()<<std::endl;
std::cout<<"matrix[1].size() "<<matrix[0].size()<<std::endl;
/*
对应关系 先取目标的列 这就是目标新的行
从下往上数目标的序号 就是目标新的列
x代表当前行 y代表当前列
target_x代表目标行 target_y代表目标列
*/
/*
改进:
(1)先对角折叠 -->转置
(2)之后在每一行翻转
这样的映射 规律性更强
*/
for(i=0;i<matrix.size();i++)
{
for(j=i+1;j<matrix[0].size();j++)
{
swap(matrix[i][j],matrix[j][i]);
}
}
for(i=0;i<matrix.size();i++)
{
for(j=0;j<matrix[0].size()/2;j++)
{
swap(matrix[i][j],matrix[i][matrix[0].size()-1-j]);
}
}
}
};