AC牛客 BM99 顺时针旋转矩阵

简介: AC牛客 BM99 顺时针旋转矩阵

BM99 顺时针旋转矩阵

题目描述

描述
有一个NxN整数矩阵,请编写一个算法,将矩阵顺时针旋转90度。
给定一个NxN的矩阵,和矩阵的阶数N,请返回旋转后的NxN矩阵。
数据范围:0<n<300,矩阵中的值满足0≤val≤1000

要求:空间复杂度 O(N^2),时间复杂度 O(N^2)
进阶:空间复杂度 O(1),时间复杂度 O(N^2)

示例1
输入:
[[1,2,3],[4,5,6],[7,8,9]],3
返回值:
[[7,4,1],[8,5,2],[9,6,3]]

解题思路

1.解法1:利用辅助数组,通过推导,我们知道每一位移动数字位置为:res[j][n-i-1] = mat[i][j];

2.解法2:我们观察,其实顺时针旋转90度,相等于,先按照做左对角线翻转数组,然后再按照列的中轴线翻转数组
实例分析:[[1,2,3],[4,5,6],[7,8,9]],3
在这里插入图片描述

实践代码

解法1

空间复杂度 O(N^2),时间复杂度 O(N^2)

import java.util.*;

public class Solution {
    public int[][] rotateMatrix(int[][] mat, int n) {
        int[][] res = new int[n][n]; //辅助数组
        for (int i = 0; i < res.length; i++) {
            for (int j = 0; j < res.length; j++) {
                res[j][n-i-1] = mat[i][j];
            }
        }
        return res;
    }
}

解法2

空间复杂度 O(1),时间复杂度 O(N^2)

import java.util.*;

public class Solution {
    public int[][] rotateMatrix(int[][] mat, int n) {
        //按照做左对角线翻转数组
        for (int i = 0; i < mat.length; i++) {
            for (int j = i; j < mat.length; j++) {
                int temp = mat[i][j];
                mat[i][j] = mat[j][i];
                mat[j][i] = temp;
            }
        }
        //再按照列的中轴线翻转数组
        for (int i = 0; i < mat.length / 2; i++) {
            for (int j = 0; j < mat.length; j++) {
                int temp = mat[j][i];
                mat[j][i] = mat[j][n - i - 1];
                mat[j][n - i - 1] = temp;
            }
        }
        return mat;
    }
}
目录
相关文章
|
7月前
力扣 790. 多米诺和托米诺平铺(一维dp)
力扣 790. 多米诺和托米诺平铺(一维dp)
|
7月前
HJ17 坐标移动
HJ17 坐标移动
63 0
|
算法 C++
剑指offer(C++)-JZ29:顺时针打印矩阵(算法-模拟)
剑指offer(C++)-JZ29:顺时针打印矩阵(算法-模拟)
|
机器学习/深度学习
华为机试HJ53:杨辉三角的变形
华为机试HJ53:杨辉三角的变形
|
算法 C++
【每日算法Day 64】LeetCode 861. 翻转矩阵后的得分
【每日算法Day 64】LeetCode 861. 翻转矩阵后的得分
|
机器学习/深度学习
【LeetCode】螺旋矩阵&&旋转图像
【LeetCode】螺旋矩阵&&旋转图像
【LeetCode】螺旋矩阵&&旋转图像
|
机器学习/深度学习
AC Leetcode 48. 旋转图像
AC Leetcode 48. 旋转图像
128 0
AC Leetcode 48. 旋转图像
AC牛客 BM97 旋转数组
AC牛客 BM97 旋转数组
94 0
|
存储
CF301D.Yaroslav and Divisors(扫描线+树状数组)
CF301D.Yaroslav and Divisors(扫描线+树状数组)
73 0