NC399. 顺时针旋转矩阵(二)
描述
有一个nxn整数矩阵,请编写一个算法,将矩阵原地顺时针旋转90度。
示例1
输入:
[[1,2,3],[4,5,6],[7,8,9]],3
输出:
[[7,4,1],[8,5,2],[9,6,3]]
C++ 解法, 执行用时: 7ms, 内存消耗: 548KB, 提交时间: 2022-07-18
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param mat DataType型vector<vector<>> * @param n int整型 * @return void */ template<class DataType> void rotateMatrix(vector<vector<DataType> >& mat, int n) { int i,j; DataType temp; for(i=0;i<n/2;i++) { for(j=0;j<n;j++) { temp=mat[i][j]; mat[i][j]=mat[n-i-1][j]; mat[n-i-1][j]=temp; } } for(i=0;i<n;i++) { for(j=0;j<i;j++) { temp=mat[i][j]; mat[i][j]=mat[j][i]; mat[j][i]=temp; } } } };
C 解法, 执行用时: 7ms, 内存消耗: 556KB, 提交时间: 2022-07-21
void rotateMatrix(int** mat, int matRowLen, int* matColLen, int n, int* returnSize, int** returnColumnSizes) { *returnSize = matRowLen; *returnColumnSizes = (int*)malloc(sizeof(int) * matRowLen); for (int i = 0; i < matRowLen; i++) { (*returnColumnSizes)[i] = (*matColLen); } int a, H = (n + 1) / 2, L = n / 2; for (int i = 0; i < H; i++) { for (int j = 0; j < L; j++) { a = mat[i][j]; mat[i][j] = mat[n - 1 - j][i]; mat[n - 1 - j][i] = mat[n - 1 - i][n - 1 - j]; mat[n - 1 - i][n - 1 - j] = mat[j][n - 1 - i]; mat[j][n - 1 - i] = a; } } }
C 解法, 执行用时: 7ms, 内存消耗: 640KB, 提交时间: 2022-06-28
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param mat int整型二维数组 * @param matRowLen int mat数组行数 * @param matColLen int* mat数组列数 * @param n int整型 * @return void * * C语言声明定义全局变量请加上static,防止重复定义 */ void rotateMatrix(int** mat, int matRowLen, int* matColLen, int n, int* returnSize, int** returnColumnSizes) { if (n == 0) { *returnSize = 0; *returnColumnSizes = NULL; return; } int tmp; *returnSize = matRowLen; *returnColumnSizes = (int *)malloc(sizeof(int) * matRowLen); for (int i = 0; i < matRowLen; i++) { (*returnColumnSizes)[i] = (*matColLen); } int row = (n + 1)/ 2, col = n / 2; for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { tmp = mat[i][j]; mat[i][j] = mat[n-1-j][i]; mat[n-1-j][i] = mat[n-1-i][n-1-j]; mat[n-1-i][n-1-j] = mat[j][n-1-i]; mat[j][n-1-i] = tmp; } } }
C++ 解法, 执行用时: 7ms, 内存消耗: 640KB, 提交时间: 2022-05-01
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param mat int整型vector<vector<>> * @param n int整型 * @return void */ void rotateMatrix(vector<vector<int> >& mat, int n) { // write code here for (int i = 0; i < n / 2; i++) { for (int j = 0; j < n; j++) { swap(mat[i][j], mat[n - i - 1][j]); } } for (int i = 0; i < n; i++) { for (int j = 0; j < i; j++) { swap(mat[i][j], mat[j][i]); } } } };
C++ 解法, 执行用时: 7ms, 内存消耗: 652KB, 提交时间: 2022-08-04
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param mat int整型vector<vector<>> * @param n int整型 * @return void */ void rotateMatrix(vector<vector<int> >& mat, int n) { // write code here for(int i = 0; i < n; i++){ for(int j = 0; j < i; j++){ swap(mat[i][j], mat[j][i]); } } for(int i = 0; i < n; i++){ reverse(mat[i].begin(), mat[i].end()); } } };