给定一个 n × n 的二维矩阵表示一个图像,将图像顺时针旋转 90-给定一个n*n的二维矩阵表示一个图像
给定一个 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,如对您有帮助可以分享给好友,谢谢。