当前位置:网站首页>【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));
}
}
提交结果
如果觉得对你有帮助的话:
点赞,你的认可是我创作的动力!
️ 收藏,你的青睐是我努力的方向!
️ 评论,你的意见是我进步的财富!
边栏推荐
猜你喜欢
随机推荐
文件系统的简单操作
Jenkins 导出、导入 Job Pipeline
Hey, I had another fight with HR in the small group!
docker+bridge+redis master-slave+sentry mode
Based on the statistical QDirStat Qt directory
2 Gigabit Optical + 6 Gigabit Electric Rail Type Managed Industrial Ethernet Switch Supports X-Ring Redundant Ring One-key Ring Switch
力扣(LeetCode)215. 数组中的第K个最大元素(2022.08.03)
mq应用场景介绍
软件测试如何系统规划学习呢?
Reproduce 20-character short domain name bypass
机器学习模型的“可解释性”
Eight guiding principles to help businesses achieve digital transformation success
The general SQL injection flow (sample attached)
复制带随机指针的链表
企业直播风起:目睹聚焦产品,微赞拥抱生态
SQL interview Questions
Power button (LeetCode) 215. The first K largest elements in the array (2022.08.03)
文件内容的操作
Enterprise live broadcast is on the rise: Witnessing focused products, micro-like embracing ecology
Implementing a server-side message active push solution based on SSE