当前位置:网站首页>【21天学习挑战赛】图像的旋转问题(二维数组)
【21天学习挑战赛】图像的旋转问题(二维数组)
2022-08-04 04:07:00 【Alex抱着爆米花】
活动地址:CSDN21天学习挑战赛
怕什么真理无穷,进一步有一份的欢喜。
【21天学习挑战赛】图像的旋转问题(二维数组)
我为什么参与挑战赛
1,机缘
读到研一了,暑假器件打开私信发现这个挑战赛就鼓起勇气参加了。
2,期待的收获
A, 本人在华南理工大学攻读专硕,目前研究方向是图像恢复,从事深度学习相关工作,目标是从事Java后端开发。
B, 期待您的反馈,如果有什么不对的地方,欢迎指正!
C, 期待认识志同道合的领域同行或技术交流。
如果感觉博主的文章还不错的话,还请关注、点赞、收藏三连支持一下博主哦
什么是二维数组?
二维数组是一种结构较为特殊的数组,只是将数组中的每个元素变成了一维数组。所以在Java中二维数组的本质上仍然是一个一维数组,内部的一维数组仍然从索引 0 开始,我们可以将它看作一个矩阵,并处理矩阵的相关问题
图像的旋转的定义
指图像以某一点为中心旋转一定的角度,形成一幅新的图像的过程。当然这个点通常就是图像的中心。既然是按照中心旋转,自然会有这样一个属性:旋转前和旋转后的点离中心的位置不变。
图像的旋转的步骤
- 如果是顺时针旋转90°:一定是先对角线翻转,再水平翻转
- 如果是逆时针旋转90°:一定是先水平翻转,再对角线翻转
斜对角翻转步骤红色为分割线,按照橙色线进行数据绿色的成对交换(matrix[i][j],matrix[j][i] = matrix[j][i],matrix[i][j])
水平翻转步骤红色为分割线,按照橙色线进行数据绿色的成对交换(matrix[i][j], matrix[i][length/2- j] = matrix[i][length/2- j] ,matrix[i][j])
️ 算法实现
因为我们只需要按照写好对角线翻转和水平翻转就可以了
LeetBook题目
旋转矩阵
给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。不占用额外内存空间能否做到?
实例
给定 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]
]
作者:力扣 (LeetCode)
链接:https://leetcode.cn/leetbook/read/array-and-string/clpgd/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
package com.wpc.leetbook.matrix_;
import org.junit.jupiter.api.Test;
import java.util.Arrays;
public class Solution {
/** * 给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。 * 不占用额外内存空间能否做到? * 思路: * 如果是顺时针旋转90° * 一定是先对角线翻转,再水平翻转 * 如果是逆时针旋转90° * 一定是先水平翻转,再对角线翻转 * * @param matrix */
public void rotate(int[][] matrix) {
//先进行斜对角翻转
int length = matrix.length;
int temp = 0;
for (int i = 0; i < length; i++) {
for (int j = i + 1; j < length; j++) {
temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}
//在进行水平翻转
int half_length = matrix.length >> 1;
int len = length - 1;
for (int i = 0; i < length; i++) {
for (int j = 0; j < half_length; j++) {
temp = matrix[i][j];
matrix[i][j] = matrix[i][len - j];
matrix[i][len - j] = temp;
}
}
}
@Test
public void test() {
int[][] matrix = new int[][]{
{
5, 1, 9, 11}, {
2, 4, 8, 10}, {
13, 3, 6, 7}, {
15, 14, 12, 16}};
rotate(matrix);
System.out.println(Arrays.deepToString(matrix));
}
}
提交结果
如果觉得对你有帮助的话:
点赞,你的认可是我创作的动力!
️ 收藏,你的青睐是我努力的方向!
️ 评论,你的意见是我进步的财富!
边栏推荐
猜你喜欢
随机推荐
JVM笔记
内网服务器访问远程服务器的端口映射
Embedded database development programming MySQL (full)
MRS: Introduction to the use of Alluxio
new Date converts strings into date formats Compatible with IE, how ie8 converts strings into date formats through new Date, how to replace strings in js, and explain the replace() method in detail
如何简化现代电子采购的自动化?
张量篇-应用案例
逻辑漏洞----其他类型
RSS订阅微信公众号初探-feed43
【观察】超聚变:首提“算网九阶”评估模型,共建开放繁荣的算力网络
嵌入式数据库开发编程MySQL(全)
仿牛客论坛项目梳理
The video of machine learning to learn [update]
PHP高级开发案例(1):使用MYSQL语句跨表查询无法导出全部记录的解决方案
XSS related knowledge points
if,case,for,while
Mobile payment online and offline payment scenarios
机器学习之视频学习【更新】
A Preliminary Study of RSS Subscription to WeChat Official Account-feed43
Deep learning -- CNN clothing image classification, for example, discussed how to evaluate neural network model








