Java实现 LeetCode 48 旋转图像
48. 旋转图像
给定一个 n × n 的二维矩阵表示一个图像。
将图像顺时针旋转 90 度。
说明:
你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。
示例 1:
给定 matrix =
[
[1,2,3],
[4,5,6],
[7,8,9]
],
原地旋转输入矩阵,使其变为:
[
[7,4,1],
[8,5,2],
[9,6,3]
]
示例 2:
给定 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]
]
PS:
假设一个5*5的数组,然后我先旋转四个角的元素,这个很简单,简单排序算法中两个元素交换的延申而已。然后我尝试交换下一组元素,我交换完成外圈元素时,发现了很有规律的现象: 当我们把数组值的行列下标对应到坐标系中时,可以将各元素,看做一个点,那么整个坐标系中有四个点(这里不能贴图,建议在纸上画出来,方便理解)。四个点的规律如下:四个点绝对向一个方向移动,且有一个下标保持不变。
左上角的点,绝对向右移动,
右上角的点,绝对向下移动,
右下角的点,绝对向左移动,
左下角的点,绝对向上移动,
归纳得到有两个固定不变的值,其对应在第一次旋转中,分别是0和matrix.length。
剩余两个变化的值也有规律,分别是两个运动轨迹:从0->matrix.length和从matrix.length->0
提取运动轨迹间的关系,就能通过循环,完成第一圈旋转
开始内圈旋转的时候,变换固定值,约束内圈,返回到开始的思路,继续旋转
class Solution {
public void rotate(int[][] matrix) {
int abs1 = 0;
int abs2 = matrix.length - 1;
int times = 0;
while (abs1 <= abs2) {
int p1 = abs1;
int p2 = abs2;
while (p1 != abs2) {
int temp = matrix[abs1][p1]; //左上
matrix[abs1][p1] = matrix[p2][abs1];//左上 = 左下
matrix[p2][abs1] = matrix[abs2][p2];//左下 = 右下
matrix[abs2][p2] = matrix[p1][abs2];//右下 = 右上
matrix[p1][abs2] = temp; //右上 = 左上
p1 += 1;
p2 -= 1;
}
abs1 += 1;
abs2 -= 1;
}
}
}
Java实现 LeetCode 48 旋转图像的更多相关文章
- 前端与算法 leetcode 48. 旋转图像
目录 # 前端与算法 leetcode 48. 旋转图像 题目描述 概要 提示 解析 解法一:转置加翻转 解法二:在单次循环中旋转 4 个矩形 算法 传入测试用例的运行结果 执行结果 GitHub仓库 ...
- [leetcode] 48. 旋转图像(Java)(模拟)
48. 旋转图像 模拟题,其实挺不喜欢做模拟题的... 其实这题一层一层的转就好了,外层转完里层再转,其实就是可重叠的子问题了. 转的时候呢,一个数一个数的转,一个数带动四个数.如图所示,2这个数应该 ...
- leetcode 48. 旋转图像 java
class Solution { public void rotate(int[][] matrix) { int n = matrix.length; for (int k = 0; k < ...
- LeetCode——48. 旋转图像
给定一个 n × n 的二维矩阵表示一个图像. 将图像顺时针旋转 90 度. 说明: 你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵.请不要使用另一个矩阵来旋转图像. 示例 1: 给定 m ...
- python(leetcode)-48旋转图像
给定一个 n × n 的二维矩阵表示一个图像. 将图像顺时针旋转 90 度. 说明: 你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵.请不要使用另一个矩阵来旋转图像. 示例 1: 给定 m ...
- LeetCode 48. 旋转图像(Rotate Image)
题目描述 给定一个 n × n 的二维矩阵表示一个图像. 将图像顺时针旋转 90 度. 说明: 你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵.请不要使用另一个矩阵来旋转图像. 示例 1: ...
- LeetCode:旋转图像【48】
LeetCode:旋转图像[48] 题目描述 给定一个 n × n 的二维矩阵表示一个图像. 将图像顺时针旋转 90 度. 说明: 你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵.请不要使 ...
- Java for LeetCode 216 Combination Sum III
Find all possible combinations of k numbers that add up to a number n, given that only numbers from ...
- Java for LeetCode 214 Shortest Palindrome
Given a string S, you are allowed to convert it to a palindrome by adding characters in front of it. ...
随机推荐
- Web_python_template_injection
0x01 pthon模板注入 判断是否为模板注入 paload http://124.126.19.106:34164/{{1+1}} //如果里面的值被执行了,那么存在模板注入 //调用os模块的p ...
- SpringMvc 你该知道如何在HandlerExceptionResolver中获取Model
在项目开发中,我们通常通过参数的形式注入Model对象,如: @RequestMapping("/demo") public String demo(Model model) { ...
- 关于Tomcat+Nginx负载均衡与Jmeter服务器测压的日记
Jmeter测压 1.Jmeter-5.1.1下载:http://mirror.bit.edu.cn/apache//jmeter/binaries/apache-jmeter-5.1.1.zip 2 ...
- Centos7 下代理配置
对于提供服务的服务器来说,一般都配置在内网环境中,而在内网下公司处于安全的考虑,一般不开放外网的访问权限.这时如果想要访问外网,一般需要配置公司提供的代理服务器再进行使用.下面介绍几种配置代理的方法: ...
- 字符串 kmp算法 codeforce 625B 题解(模板)
题解:kmp算法 代码: #include <iostream>#include <algorithm>#include <cstring>#include < ...
- 模拟SWPU邮件登录页面
模拟SWPU邮件登录页面设计流程 一.开发工具准备 本次开发该页面时使用的开发工具为vscode—— 在下载安装完成后,需要下载各类插件——如汉化.通过浏览器打开网页插件等. 二.开发过程 首先,打开 ...
- 正则+re模块知识总结
目录 正则表达式 定义+特点 元字符 量词 贪婪匹配与非贪婪匹配 转义符 re模块 re.findall re.search re.match re.compile re.finditer re.sp ...
- sourcetree 拉取 一直让输入密码
以下方法都没用 在控制台中 git gc git prune git config --global credential.helper store git pull 输入账号密码 git pull ...
- SPOJ-PGCD Primes in GCD Table
题目链接:https://vjudge.net/problem/SPOJ-PGCD 题目大意: 给定 \(N\) 和 \(M\),求满足 \((1 \le x \le N), (1 \le y \le ...
- Shone.Math开源系列1 — 基于.NET 5实现Math<T>泛型数值计算
Shone.Math开源系列1 — 基于.NET 5实现Math<T>泛型数值计算 作者:Shone .NET 5 preview 4已经可用了,从微软Build2020给出的信息看,.N ...