给定一个 n × n 的二维矩阵表示一个图像,将图像顺时针旋转 90-给定一个n*n的二维矩阵表示一个图像

2023-08-28 02:37:09

 

给定一个 n × n 的二维矩阵表示一个图像,将图像顺时针旋转 90 度。

说明:

你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。

示例 1:

给定 matrix =

[

[1,2,3],

[4,5,6],

[7,8,9]

],

原地旋转输入矩阵,使其变为:

[

[7,4,1],

[8,5,2],

[9,6,3]

]

原理分析:

一共使用了两种方法实现,第一种两层for循环,脑袋里面的第一想法,好实现,但是不建议,推荐第二种方法,具体分析参考手绘图片。

代码如下,为了方便理解,手绘图一张:

/****

* 给定一个 n × n 的二维矩阵表示一个图像。

将图像顺时针旋转 90 度。

说明:

你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。

示例 1:

给定 matrix =

[

[1,2,3],

[4,5,6],

[7,8,9]

],

原地旋转输入矩阵,使其变为:

[

[7,4,1],

[8,5,2],

[9,6,3]

]

* @param args

*/

public static void main(String[] args) {

int[][] a = new int[3][3];

a[0][0]=1;

a[0][1]=2;

a[0][2]=3;

a[1][0]=4;

a[1][1]=5;

a[1][2]=6;

a[2][0]=7;

a[2][1]=8;

a[2][2]=9;

int[][] v = TestMatrix.getMatricSpinSimple(a,0);

/***

* 打印矩阵

*/

for(int h = 0 ; h < v.length; h ++){

int[] kk = v[h];

for(int p = 0;p < kk.length;p ++){

System.out.print(v[h][p]);

}

System.out.println();

}

}

/***

* 旋转矩阵

* @param a

* @return

*/

private static int[][] getMatricSpinComplex(int[][] a){

int len = a.length-1;

/***

* 存放新的数组

*/

int[][] v = new int[3][3];

int y = 0;//存放数组的二维数据的指针

for(int k = len;k >= 0;k--){

int[] b = a[k];

for(int n = 0; n < b.length;n++){

v[n][y]=b[n];

}

++y;

}

return v;

}

/***

* 旋转矩阵思路二

* @param a

* @return

*

*/

private static int[][] getMatricSpinSimple(int[][] a,int c){

int len = a.length;

//int c = 0;

int d = len - 2*c;//循环次数

int end = len - c -1;

/***

* 存放新的数组

*/

//int[][] v = new int[3][3];

for(int k = 0 ; k < d-1; k++){

int temp = a[c][c+k];

a[c][c+k] = a[end-k][c];

a[end-k][c] = a[end][end-k];

a[end][end-k] = a[c+k][end];

a[c+k][end] = temp;

}

//getMatricSpinSimple(a,c+1);

return a;

}

---------------------

作者:勿以浮沙筑高台ing

来源:CSDN

原文:

https://blog.csdn.net/weixin_39364289/article/details/89191604

版权声明:本文为博主原创文章,转载请附上博文链接!


以上就是关于《给定一个 n × n 的二维矩阵表示一个图像,将图像顺时针旋转 90-给定一个n*n的二维矩阵表示一个图像》的全部内容,本文网址:https://www.7ca.cn/baike/72005.shtml,如对您有帮助可以分享给好友,谢谢。
标签:
声明