列表

详情


NC399. 顺时针旋转矩阵(二)

描述

有一个nxn整数矩阵,请编写一个算法,将矩阵原地顺时针旋转90度。

给定一个nxn的矩阵,和矩阵的阶数n,请原地旋转矩阵。

数据范围:,矩阵中的值满足

要求:空间复杂度 ,时间复杂度

示例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());
        }
    }
};

上一题