我是靠谱客的博主 幽默大门,这篇文章主要介绍矩阵数据顺时针旋转一步题目描述解答思路解答源码,现在分享给大家,希望可以做个参考。

矩阵数据顺时针旋转一步

  • 题目描述
  • 解答思路
  • 解答源码

京东前端2022年最后一场笔试(2022-10-29)
编程题第三题

题目描述

小红拿到了一个n行n列的矩阵,她希望将矩阵的每一层都顺时针旋转一下。你能帮帮她吗?
我们定义矩阵层数是由外到内的。例如对于矩阵:

复制代码
1
2
3
4
5
6
7
8
9
10
2 3 1 2 2 3 4 5 1 5 3 2 4 3 4 4 // 旋转之后 2 2 3 1 1 5 3 2 4 3 4 5 3 4 4 2

解答思路

复制代码
1
2
3
4
5
其实就是暴力解答。 首先新开辟一个空间matrix2,做为最终的输出结果。 然后找到矩阵的圈数,以及圈的起始和结束的索引,【borderL, borderR) 。 遍历每一圈中的数字,将他们进行相应的上下左右移动。

解答源码

复制代码
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); int[][] matrix = new int[n][n]; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { matrix[i][j] = in.nextInt(); } } int[][] matrix2 = new int[n][n]; int m = n; int borderL = -1, borderR = n+1; while (m >1){ m -= 2; borderL++; borderR--; for (int i = borderL; i < borderR; i++) { for (int j = borderL; j < borderR; j++) { if(i==borderL || i == borderR-1 || j == borderL || j == borderR-1){ if((i == borderL && j == borderL) || (i < borderR-1 && j == borderL)){ matrix2[i][j] = matrix[i+1][j]; // 上移 }else if(i == borderL && j < borderR){ matrix2[i][j] = matrix[i][j-1]; // 右移 }else if(i == borderR-1 && j < borderR-1){ matrix2[i][j] = matrix[i][j+1]; // 左移 }else if((i == borderR-1 && j == borderR -1) || (i < borderR && j == borderR -1)){ matrix2[i][j] = matrix[i-1][j]; // 下移 } }else { j = borderR-2; } } } } System.out.println("输出"); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { System.out.print(matrix2[i][j]+" "); } System.out.println(); } } }

最后

以上就是幽默大门最近收集整理的关于矩阵数据顺时针旋转一步题目描述解答思路解答源码的全部内容,更多相关矩阵数据顺时针旋转一步题目描述解答思路解答源码内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部