java算法题解牛客BM99顺时针旋转矩阵示例

 更新时间:2023年01月09日 10:42:07   作者:itbird01  
这篇文章主要为大家介绍了java算法题解牛客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;
	}
}

以上就是java算法题解牛客BM99顺时针旋转矩阵示例的详细内容,更多关于java算法顺时针旋转矩阵的资料请关注脚本之家其它相关文章!

相关文章

  • 深入理解Java注解类型(@Annotation)

    深入理解Java注解类型(@Annotation)

    这篇文章主要介绍了深入理解Java注解类型(@Annotation),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • springboot自定义stater启动流程

    springboot自定义stater启动流程

    这篇文章主要介绍了springboot自定义stater启动流程,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • Java字符流与字节流区别与用法分析

    Java字符流与字节流区别与用法分析

    这篇文章主要介绍了Java字符流与字节流区别与用法,较为详细的分析了java字符流与字节流的概念、功能与使用方法,具有一定参考借鉴价值,需要的朋友可以参考下
    2016-06-06
  • Go反射底层原理及数据结构解析

    Go反射底层原理及数据结构解析

    这篇文章主要介绍了Go反射底层原理及数据结构解析,反射的实现和interface的组成很相似,都是由“类型”和“数据值”构成,下面小编分享更多相关内容需要的小伙伴可以参考一下
    2022-06-06
  • Java基础之Comparable与Comparator概述

    Java基础之Comparable与Comparator概述

    这篇文章主要介绍了Java基础之Comparable与Comparator详解,文中有非常详细的代码示例,对正在学习java基础的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04
  • Spring与Mybatis的整合方法有哪些

    Spring与Mybatis的整合方法有哪些

    本文主要给大家介绍Spring与Mybatis的三种常用整合方法,需要用到的整合框架包mybatis-spring.jar,对spring mybatis整合感兴趣的朋友可以参考下本文
    2015-10-10
  • Spring中@Value注解获取不到配置值问题及解决

    Spring中@Value注解获取不到配置值问题及解决

    这篇文章主要介绍了Spring中@Value注解获取不到配置值问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • Java如何获取相对路径文件

    Java如何获取相对路径文件

    这篇文章主要介绍了Java如何获取相对路径文件问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • Java日常练习题,每天进步一点点(42)

    Java日常练习题,每天进步一点点(42)

    下面小编就为大家带来一篇Java基础的几道练习题(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望可以帮到你
    2021-07-07
  • 浅析从同步原语看非阻塞同步以及Java中的应用

    浅析从同步原语看非阻塞同步以及Java中的应用

    非阻塞同步是基于冲突检测的乐观并发策略,这种乐观的并发策略使得很多线程不需要因为竞争失败直接挂起,这种同步措施称为非阻塞同步。下面我们就从硬件原语开始了解非阻塞同步,并看一看在Java中非阻塞同步的一些应用
    2021-06-06

最新评论