8和9是关于二维数组的题目,更多考验的是编码能力、分析解决问题能力。对于算法方面,目前没有什么更优的令人惊艳的算法。10是两个数组交集,没啥好的技巧,主要是编码能力考验。
8.旋转图像或旋转数组
(1)题目
给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 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]]
示例 3:
输入:matrix = [[1]] 输出:[[1]]
提示:
matrix.length == n
matrix[i].length == n
1 <= n <= 20
-1000 <= matrix[i][j] <= 1000
(2)解题思路:
1.题目要求原地旋转,但以后有机会想用临时数组尝试一下。
2.原地旋转方法
这是从旋转后的结果来分析,先上下交换后对角线交换即可。如下图
class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
int temp;
int leni=matrix.size();
int lenj=matrix[0].size();
//上下交换
for(int