【力扣hot100】【Leetcode 48】旋转图像|对称矩阵 矩阵转置算法笔记及打卡(16/100)
【力扣】【Leetcode 48】旋转图像对称矩阵 | 矩阵转置给定一个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]]提示n matrix.length matrix[i].length1 n 20-1000 matrix[i][j] 1000参考解法class Solution { public: void rotate(vectorvectorint matrix) { int n matrix.size(); int tmp; // 临时变量 // 1. 上下翻转 // 对称行号 最后一行号 - 当前行号 for (int i 0; i n / 2; i) { for (int j 0; j n; j) { tmp matrix[i][j]; matrix[i][j] matrix[n - 1 - i][j]; matrix[n - 1 - i][j] tmp; } } // 2. 主对角线翻转 for (int i 0; i n; i) { for (int j i 1; j n; j) { tmp matrix[i][j]; matrix[i][j] matrix[j][i]; matrix[j][i] tmp; } } } };完整解法由LLM辅助生成#include iostream #include vector #include algorithm // swap using namespace std; int main() { int n; cin n; vectorvectorint matrix(n, vectorint(n)); // 输入 for (int i 0; i n; i) { for (int j 0; j n; j) { cin matrix[i][j]; } } // 旋转 90 度 // 1. 上下翻转 for (int i 0; i n / 2; i) { swap(matrix[i], matrix[n - 1 - i]); } // 2. 对角线翻转 for (int i 0; i n; i) { for (int j i 1; j n; j) { swap(matrix[i][j], matrix[j][i]); } } // 输出 for (int i 0; i n; i) { for (int j 0; j n; j) { cout matrix[i][j] ; } cout endl; } return 0; }注解以上涉及的swap函数相当于void swap(a, b){ tmp a; a b; b tmp; }