题目
分析
需要顺时针转90°,起初我考虑找规律,看能不能用swap实现,但是发现数据比较大的话比较复杂,然后参考官方做法,先水平倒转,再对角线交换,便可实现顺时针旋转。
代码
class Solution
{
public:
void rotate(vector<vector<int>>& matrix)
{
int n = matrix.size();
// 水平翻转
for (int i = 0; i < n / 2; ++i)
{
for (int j = 0; j < n; ++j)
{
swap(matrix[i][j], matrix[n - i - 1][j]);
}
}
// 主对角线翻转
//若是想逆时针旋转,可以考虑反对角线翻转
for (int i = 0; i < n; ++i)
{
for (int j = 0; j < i; ++j)
{
swap(matrix[i][j], matrix[j][i]);
}
}
}
};
测评结果
如此观之,很可以。
总结
做题目也不能只拘束于编程思想,可使用数学、几何关系这种,很强!
延伸的话,循环两次便是转180°,把主对角线翻转改成反对角线翻转便是逆时针旋转。