LeetCode-048-旋转图像
旋转图像
题目描述:给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。
你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。
示例说明请见LeetCode官网。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/rotate-image/
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法一:数组遍历
首先,寻找规律,找到当前节点要替换到哪个位置,寻找到的规律是
(x, y)位置的数字经过顺时针旋转90度之后要放在(y, matrix.length - 1 - x)这个位置,然后还有一个规律是,顺时针旋转90度时,其实是每4个节点旋转了一周,所以具体的处理过程如下:
- 从数组的第一位开始遍历,x和y分别为坐标位,初始都为0,count为所有的节点总数,last为当前位置的值,用一个同样大小的数组flag记录每一个位置是否已经是被替换过的值;
- 根据规律获取应该被替换的节点
(nextX, nextY),判断这个节点是否已经被替换:
- 如果已经被替换过,则遍历数组,寻找下一个未被替换的节点,并且初始化x和y为当前节点的坐标,temp为当前节点的值,然后进行下一次处理;
- 如果没有被替换过,则将当前节点的值替换为last,并用last记录替换之前的值,然后更新x和y为当前值的坐标,并更新当前位置为true即已替换,并将count减一。
- 循环中断的条件就是count为0,即已经将所有节点都处理完成。
public class LeetCode_048 {
public static void rotate(int[][] matrix) {
boolean[][] flag = new boolean[matrix.length][matrix.length];
int count = matrix.length * matrix.length;
int x = 0, y = 0, temp, last = matrix[0][0];
while (count > 0) {
int nextX = y, nextY = matrix.length - 1 - x;
if (flag[nextX][nextY]) {
// 下一个节点已替换,寻找下一个未替换的节点
for (int i = x; i < matrix.length; i++) {
boolean isFound = false;
for (int j = 0; j < matrix.length; j++) {
if (!flag[i][j]) {
x = i;
y = j;
last = matrix[x][y];
isFound = true;
break;
}
}
if (isFound) {
break;
}
}
} else {
// 下一个节点没有被替换,则替换之,并且将之标记为已替换
temp = matrix[nextX][nextY];
matrix[nextX][nextY] = last;
last = temp;
count--;
x = nextX;
y = nextY;
flag[nextX][nextY] = true;
}
}
}
public static void main(String[] args) {
int[][] matrix = new int[][]{{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}, {11, 12, 13, 14, 15}, {16, 17, 18, 19, 20}, {21, 22, 23, 24, 25}};
rotate(matrix);
for (int[] ints : matrix) {
for (int anInt : ints) {
System.out.print(anInt + " ");
}
System.out.println();
}
}
}
【每日寄语】 愿你昨晚的坏情绪,在今日掀开被子,拉开窗帘的那一刻,杳无踪影。
LeetCode-048-旋转图像的更多相关文章
- LeetCode:旋转图像【48】
LeetCode:旋转图像[48] 题目描述 给定一个 n × n 的二维矩阵表示一个图像. 将图像顺时针旋转 90 度. 说明: 你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵.请不要使 ...
- 前端与算法 leetcode 48. 旋转图像
目录 # 前端与算法 leetcode 48. 旋转图像 题目描述 概要 提示 解析 解法一:转置加翻转 解法二:在单次循环中旋转 4 个矩形 算法 传入测试用例的运行结果 执行结果 GitHub仓库 ...
- LeetCode——48. 旋转图像
给定一个 n × n 的二维矩阵表示一个图像. 将图像顺时针旋转 90 度. 说明: 你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵.请不要使用另一个矩阵来旋转图像. 示例 1: 给定 m ...
- [Leetcode][048] Rotate Image 略详细 (Java)
题目在这里 https://leetcode.com/problems/rotate-image/ [个人分析] 这个题目,我觉得就是考察基本功.考察细心的,算法方面没有太多东西,但是对于坐标的使用有 ...
- python(leetcode)-48旋转图像
给定一个 n × n 的二维矩阵表示一个图像. 将图像顺时针旋转 90 度. 说明: 你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵.请不要使用另一个矩阵来旋转图像. 示例 1: 给定 m ...
- LeetCode 48. 旋转图像(Rotate Image)
题目描述 给定一个 n × n 的二维矩阵表示一个图像. 将图像顺时针旋转 90 度. 说明: 你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵.请不要使用另一个矩阵来旋转图像. 示例 1: ...
- Java实现 LeetCode 48 旋转图像
48. 旋转图像 给定一个 n × n 的二维矩阵表示一个图像. 将图像顺时针旋转 90 度. 说明: 你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵.请不要使用另一个矩阵来旋转图像. 示 ...
- [leetcode] 48. 旋转图像(Java)(模拟)
48. 旋转图像 模拟题,其实挺不喜欢做模拟题的... 其实这题一层一层的转就好了,外层转完里层再转,其实就是可重叠的子问题了. 转的时候呢,一个数一个数的转,一个数带动四个数.如图所示,2这个数应该 ...
- Java for LeetCode 048 Rotate Image
You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwise). ...
- leetcode 48. 旋转图像 java
class Solution { public void rotate(int[][] matrix) { int n = matrix.length; for (int k = 0; k < ...
随机推荐
- Pycharm新建文件时头部模板的配置方法
方法
- Linux 集群 和免秘钥登录的方法。
/* 1.1.什么是集群? 很多台服务器(计算机)做相同的事,就称之为集群 服务器和服务器之间必须要处于联通状态(linux01和linux02可以相互访问并且传输数据) 服务器的配置和常见的计算机没 ...
- 计算机网络再次整理————tcp例子前奏[三]
前言 简单编写一下tcp例子. 正文 我们常说IOS有7层,实际上也只有4层,或者这样说简单的说是4层. 首先是数据链路层,首先这一层解决了什么问题呢?为什么要有这一层呢? 首先要抛开有操作系统的意识 ...
- 如何在 VS Code 中为 Java 类生成序列化版本号
前言 IDEA 提供自动生成序列化版本号的功能,其实 VS Code 也可以,只是默认关闭了这个功能,下面就来看看如何开启这个功能吧. 配置过程 首先需要保证 VS Code 上安装了提供 Java ...
- Redis性能分析思路
Redis性能分析有几个大的方向.分别是 (1)基准对比 (2)配置优化 (3)数据持久化 (4)键值优化 (5)缓存淘汰 (6)Redis集群 基准对比 在没有业务实例运行的情况下,在服务器上通过测 ...
- 马哈鱼间接数据流中的where-group-by子句
马哈鱼间接数据流中的where-group-by子句 本文介绍间接数据流中的where-group-by子句. 1.列在where子句中 WHERE子句中源表中的某些列不影响目标列,但对所选行集至关重 ...
- nginx103
user nobody;worker_processes 1;error_log /home/logs/error.log info;#pid logs/nginx.pid;ev ...
- HttpClient的NoHttpResponse问题
调用第三方接口时会报NoHttpResponse异常,原因是上次的连接已经断掉了,但是客户端并未知道,复用上次连接就报错了,所以要解决这个问题,就是要校验上次链接是否断掉了 1. httpCl ...
- #pragma mark指令
1.#pragma mark指令的使用 功能:简单来说就是对代码的分组,方便代码查找和导航用的 它们告诉Xcode编译器,要在编辑器窗格顶部的方法和函数弹出菜单中将代码分隔开.一些类(尤其是一些控制器 ...
- shell脚本之数组基本操作及排序
数组的基本操作及排序 1.数组定义方法: ( 6 7 9 4 3 2) 0 1 2 3 4 5 #下标号 方法一: 数组名=(value0 value1 value2 -) 方法二: 数组名=([0] ...