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算法顺时针旋转矩阵的资料请关注脚本之家其它相关文章!

相关文章

  • mybatis整合spring实现开启mapper.xml映射文件扫描

    mybatis整合spring实现开启mapper.xml映射文件扫描

    这篇文章主要介绍了mybatis整合spring实现开启mapper.xml映射文件扫描,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • SpringBoot+MyBatis-Plus实现分页功能

    SpringBoot+MyBatis-Plus实现分页功能

    在SpringBoot项目中,结合MyBatis-Plus(简称MP)可以非常方便地实现分页功能,MP为开发者提供了分页插件PaginationInterceptor,只需简单配置即可使用,本文给大家介绍了SpringBoot+MyBatis-Plus实现分页功能,文中通过代码示例给大家介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • 10个Java程序员熟悉的面向对象设计原则

    10个Java程序员熟悉的面向对象设计原则

    这篇文章主要为大家详细介绍了Java程序员应当知道的10个面向对象设计原则,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • IDEA2023版本创建Spring项目只能勾选17和21却无法使用Java8的完美解决方案

    IDEA2023版本创建Spring项目只能勾选17和21却无法使用Java8的完美解决方案

    想创建一个springboot的项目,本地安装的是1.8,但是在使用Spring Initializr创建项目时,发现版本只有17和21,这篇文章主要介绍了IDEA2023版本创建Sping项目只能勾选17和21,却无法使用Java8的解决方法,需要的朋友可以参考下
    2023-12-12
  • springboot项目如何在linux服务器上启动、停止脚本

    springboot项目如何在linux服务器上启动、停止脚本

    这篇文章主要介绍了springboot项目如何在linux服务器上启动、停止脚本问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • Java通过URL类下载图片的实例代码

    Java通过URL类下载图片的实例代码

    这篇文章主要介绍了Java通过URL类下载图片,文中结合实例代码补充介绍了java通过url获取图片文件的相关知识,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-02-02
  • java检查数组是否有重复元素的方法

    java检查数组是否有重复元素的方法

    这篇文章主要介绍了java检查数组是否有重复元素的方法,涉及java针对数组元素的操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • Json 自定义使用函数的简单实例

    Json 自定义使用函数的简单实例

    下面小编就为大家带来一篇Json 自定义使用函数的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10
  • java线程池详解及代码介绍

    java线程池详解及代码介绍

    这篇文章主要介绍了java中线程池的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-08-08
  • java 中模式匹配算法-KMP算法实例详解

    java 中模式匹配算法-KMP算法实例详解

    这篇文章主要介绍了java 中模式匹配算法-KMP算法实例详解的相关资料,需要的朋友可以参考下
    2017-06-06

最新评论