当前位置:网站首页>【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));
}
}
提交结果
如果觉得对你有帮助的话:
点赞,你的认可是我创作的动力!
️ 收藏,你的青睐是我努力的方向!
️ 评论,你的意见是我进步的财富!
边栏推荐
- 2022年软件测试——精选金融银行面试真题
- Learn iframes and use them to solve cross-domain problems
- ingress 待完善
- if,case,for,while
- 数据集类型转换—TFRecords文件
- 如果禁用了安全启动,GNOME 就会发出警告
- new Date将字符串转化成日期格式 兼容IE,ie8如何通过new Date将字符串转化成日期格式,js中如何进行字符串替换, replace() 方法详解
- How to systematically plan and learn software testing?
- JVM Notes
- Deep learning -- CNN clothing image classification, for example, discussed how to evaluate neural network model
猜你喜欢

Polygon zkEVM network node

TL431的基本特性以及振荡电路

7-3 LVS+Keepalived集群叙述与部署

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

基地址:环境变量

7-1 LVS+NAT 负载均衡群集,NAT模式部署

数组相关 内容 解析

高效IO模型

if,case,for,while

系统设计.秒杀系统
随机推荐
【医保科普】维护医保基金安全,我们可以这样做
y86.第四章 Prometheus大厂监控体系及实战 -- prometheus存储(十七)
Shell 函数
Hey, I had another fight with HR in the small group!
unity框架之缓存池
mysql索引笔记
MRS: Alluxio的使用介绍
7-2 LVS+DR概述与部署
7-1 LVS+NAT 负载均衡群集,NAT模式部署
PHP高级开发案例(1):使用MYSQL语句跨表查询无法导出全部记录的解决方案
"Introduction to nlp + actual combat: Chapter 8: Using Pytorch to realize handwritten digit recognition"
MySQL query optimization and tuning
Introduction to mq application scenarios
Gigabit 2 X light 8 electricity management industrial Ethernet switches WEB management - a key Ring Ring net switch
2.15 keil使用电脑端时间日期
深度学习之 10 卷积神经网络3
数组相关 内容 解析
Implementing a server-side message active push solution based on SSE
JVM的内存模型简介
7.LVS负载均衡群集之原理叙述