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

概述

矩阵数据顺时针旋转一步

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

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

题目描述

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

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

解答思路

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

解答源码

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();
}
}
}

最后

以上就是幽默大门为你收集整理的矩阵数据顺时针旋转一步题目描述解答思路解答源码的全部内容,希望文章能够帮你解决矩阵数据顺时针旋转一步题目描述解答思路解答源码所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部