二维数组旋转

二维数组旋转

周作业1: 写程序,将一个正方形二维数组旋转90度
//不是说按规律打印,是真的要把数组给旋转
//要求: 尽量不要用新的数组 (尽量减少内存开销)

这个题我可想了好久,第一想法是直接用另一个二维数组把旋转后的数放在新的数组中,但是要求不能用新数组,后来我又想用一个一维数组做暂存数组用来实现每一行每一列的数组交换,如果实现,虽然用了一维数组但比二维数组减少内存开销。但是吧,后来我发现还是不简单,一直没想出来,索性放弃了。一个多小时后写写画画后,我突然发现了光,哈哈哈。上图:

在这里插入图片描述

我这里在交换时,只用了一个变量(当然也可以不用,那就内存开销更少了,这里主要是习惯,哈哈)然后,在矩阵进行上下翻转的时候,我用了一个一维数组变量(仅仅是使用了栈内存)来进行翻转。如果不考虑时间复杂度,我个人感觉就就内存开销还是非常小的。

废话不多说,直接上代码啦:

public class Test1 {
	public static void main(String[] args) {
	int[][] xx=
	{{1, 2, 3, 4},
	 {5, 6, 7, 8},
	 {9, 10,11,12},
	 {13,14,15,16}
	};
	//先展示原二维数组
	for(int i=0;i<4;i++) {
		for(int j=0;j<4;j++)
			System.out.print(xx[i][j]+" ");
			System.out.println();
		}
	
	//根据对角线交换值
	for(int i=xx.length-1,k=0;i>0;i--,k++) {
		for(int j=i-1,h=k+1;j>=0;j--,h++) {
			int temp=xx[k][j];
			xx[k][j]=xx[h][i];
			xx[h][i]=temp;
		}
	}
	System.out.println();
	//交换完值以后,会发现结果与我们想要的结果上下顺序颠倒了
	for(int i=0;i<4;i++) {
	for(int j=0;j<4;j++)
		System.out.print(xx[i][j]+" ");
		System.out.println();
	}
	
	//我们把顺序交换成正确的
	for(int i=xx.length-1,j=0; i>=0&&j<xx.length; i--,j++) {
	 if(j<i) {
		 int[] y=xx[i];
		 xx[i]=xx[j];
		 xx[j]=y;
		 
	 }
	 else
		 break;
	 
	}
	
 System.out.println();
 //打印出我们想要的正确的结果
	for(int i=0;i<4;i++) {
		for(int j=0;j<4;j++)
			System.out.print(xx[i][j]+" ");
			System.out.println();
		}
}
}

在这里插入图片描述

程序运行,没有毛病!这个方法,自己想的,如果有更好的改进,求大神斧正!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值