IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 程序员面试经典系列(七):旋转矩阵 -> 正文阅读

[数据结构与算法]程序员面试经典系列(七):旋转矩阵

题目描述:

给你一幅由 N × N矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。

不占用额外内存空间能否做到?

示例:
输入:给定 matrix = 
[
	[1,2,3],
	[4,5,6],
	[7,8,9]
],

输出:原地旋转输入矩阵,使其变为
[
	[7,4,1],
	[8,5,2],
	[9,6,3]
]

输入:给定 matrix =
[
  [ 5, 1, 9,11],
  [ 2, 4, 8,10],
  [13, 3, 6, 7],
  [15,14,12,16]
], 

输出:原地旋转输入矩阵,使其变为
[
  [15,13, 2, 5],
  [14, 3, 4, 1],
  [12, 6, 8, 9],
  [16, 7,10,11]
]

更多详细描述,可见官网

解题思路

要将矩阵旋转90°,最简单的做法就是一层一层进行旋转。对每一层执行环状旋转:将上边的移到右边,右边移到下边,下边移到左边,左边移到上边。
在这里插入图片描述
根据索引一个一个进行交换:

// 伪代码
for i = 0 to n
	temp = top[i];
	top[i] = left[i];
	left[i] = bottom[i];
	bottom[i] = right[i];
	right[i] = temp;

Java代码:

public class Main{
	private static int[][]  rotate(int[][] matrix){
	       if (matrix.length == 0 || matrix.length != matrix[0].length){
	           return null;
	       }
	       int n = matrix.length;
	       for (int layer = 0; layer < n/2; layer++) {
	           int first = layer;
	           int last = n - 1 - layer;
	           for (int i = first; i < last; i++) {
	               int offset = i - first;
	               int top = matrix[first][i];
	               matrix[first][i] = matrix[last-offset][first];
	               matrix[last-offset][first] = matrix[last][last - offset];
	               matrix[last][last - offset] = matrix[i][last];
	               matrix[i][last] = top;
	           }
	       }
	       return matrix;
	}
	
	public static void main(String[] args) {
	       int[][] array = {
	               {1,2,3},
	               {4,5,6},
	               {7,8,9}
	       };
	       int[][] rotate = rotate(array);
	       for (int i = 0; i < rotate.length; i++) {
	           for (int j = 0; j < rotate[0].length; j++) {
	               System.out.print(rotate[i][j]+"  ");
	           }
	           System.out.println();
	       }
	}
}

该题的最优解法也是需要 O ( n 2 ) O(n^2) O(n2)的时间复杂度。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-10-13 11:40:49  更:2021-10-13 11:41:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:40:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码