给定一个由NxN矩阵表示的图像,其中每个像素的大小为4个字节,编写一个方法,将图像旋转90°。不占用额外内存空间能否做到?

将矩阵旋转90°,第一个想到的做法就是一层一层进行旋转,将上边移到右边,右边移到下边,下边移到左边,左边移到上边。

那么如果要交换就是把上边复制到一个大小为N的数组中,然后将左边移到上边,下边移到左边,右边移到下边,等等。这样要占用的内存大小是O(N)。

实际上有一个更好的办法,是按照索引一个一个进行交换:

for i = 0 to N

temp = top[i]

top[i] = left[i]

left[i] = bottom[i]

bottom[i] = right[i]

right[i] = temp从最外一层逐层向里,在每一层上执行上述交换,空间复杂度为1,时间复杂度为O(n2)

public class rotate {

public void rotate(int[][] matrix, int n)

{

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;

}

}

}

}

java实现矩阵旋转90读_【Java】旋转NxN的矩阵90°相关推荐

  1. 有一副由NxN矩阵表示的图像,这里每个像素用一个int表示,请编写一个算法,在不占用额外内存空间的情况下(即不使用缓存矩阵),将图像顺时针旋转90度。 给定一个NxN的矩阵,和矩阵的阶数N,请返回旋转

    有一副由NxN矩阵表示的图像,这里每个像素用一个int表示,请编写一个算法,在不占用额外内存空间的情况下(即不使用缓存矩阵),将图像顺时针旋转90度. 给定一个NxN的矩阵,和矩阵的阶数N,请返回旋转 ...

  2. 方形物体绕中心旋转的扭力_三维旋转

    chopper:目录​zhuanlan.zhihu.com 本篇文章主要介绍三维空间下旋转的三种表示形式:四元数.矩阵和欧拉角,阐述了三种旋转表示的数学原理并且对比了它们的优缺点.目录结构: 四元数 ...

  3. ker矩阵是什么意思_重做第一次作业(矩阵)

    doc 函数名 输进命令行窗口 可以查看官方帮助,但是是英文的--得搭配翻译软件 Clc clear每次写程序前 一个是擦黑板(清空命令行窗口)一个是清除所有变量 clf 画图前,用于清除所有图片 什 ...

  4. python矩阵的共轭转置_基础 | Python 下的矩阵操作

    关键词:线性代数 / 矩阵 / 运算 今天小编将详细介绍矩阵的运算规则与数学符号应用在矩阵上的含义,如同算数字的加减法需要了解计算公式的规则一样,矩阵的运算虽然与单纯数字运算相似,但其细节的相异处还需 ...

  5. java多线程按行读取文件_“java”中多线程按行读取txt且每个线程读的内容不能重复,这么求“demo”?...

    展开全部 你把原来程序中直接读的地62616964757a686964616fe4b893e5b19e31333365646234方,改成调用上面的函数,由该函数统一读行.这样,不管是你有 N 个线程 ...

  6. python将矩阵顺时针旋转90度_在Python中将方形矩阵逆时针旋转90度的程序

    假设我们有一个正方形矩阵,我们必须将其逆时针旋转90度.147 258 369 那么输出将是789 456 1个23 为了解决这个问题,我们将遵循以下步骤-如果矩阵为空,则返回一个空白列表 n:=矩阵 ...

  7. java 判断文件是否可读_如何检查文件在Java中是否可读,可写或可执行?

    通常,无论何时创建文件,都可以限制/允许某些用户读取/写入/执行文件. 在Java文件中(它们的抽象路径)由java.io包的File类表示.此类提供了各种方法来对文件执行各种操作,例如读取,写入,删 ...

  8. JAVA梅森旋转随机算法_梅森旋转算法

    概念 梅森旋转算法(Mersenne twister),可以快速产生高质量的伪随机数,修正了古典随机数发生算法的很多缺陷. 常见的两种为基于32位的 MT19937和基于64位的 MT19937-64 ...

  9. java抓取网页标题内容_[Java教程]java 网页页面抓取标题和正文

    [Java教程]java 网页页面抓取标题和正文 0 2014-07-10 09:01:30 import java.io.BufferedReader;import java.io.IOExcept ...

  10. java后台怎么设置转盘抽奖_[Java教程]转盘抽奖

    [Java教程]转盘抽奖 0 2015-09-09 12:00:06 html部分 css部分,由于做的这个转盘是手机端的,采用的响应式布局.turntableWap{ padding:1rem; b ...

最新文章

  1. FFMpeg的基本用法
  2. 这个学期的总结,下个学期比较坑的事情和要注意的点
  3. leetcode 410. 分割数组的最大值(二分法)
  4. 一个我自己建的程序员资料分享站
  5. quartz和应用的集群问题
  6. C/C++笔试经典程序(二)
  7. 计算机组成原理学习的一些感悟
  8. 微信开发模式api接口文档简介
  9. 交通流特征工程小技巧与思考
  10. 刽子手游戏 做题笔记
  11. 淘客联盟系统维护光盘2008新春大礼包
  12. redis中使用GeoHash
  13. 王爽老师汇编第三版课程设计 一
  14. proftpd mysql_proftpd+mysql 安装配置详细文档
  15. 电脑硬盘分区不见了怎么恢复数据?方法来啦
  16. java picked up,抑制“Picked up _JAVA_OPTIONS”信息
  17. 【游戏开发】unity教程4 打飞碟小游戏
  18. 高德API支持WMS服务器,GCJ02-Correct
  19. 数据可视化之Seaborn绘图
  20. DHTMLXGantt 中使用工作时间日历的示例

热门文章

  1. 解决 WSL 与 Windows 交互问题
  2. VS C++ win32 更改static文本字体和文本背景
  3. win32之GDI4
  4. stm32F103移植FreeRTOS V10.2.1打印任务堆栈信息和任务运行时间统计
  5. 泰坦尼克号任务-数据处理和可视化
  6. 服务器节点如何采集信息,采集服务器
  7. 7月12日MATLAB学习笔记
  8. 强大的计算机工作面试笔试题目...
  9. MySQL 有这一篇就够
  10. 成都小程序服务商汇总