【leetcode】48.(Medium)Rotate Image

题目链接


解题思路:
首先如果二维数组是11或者22,直接蛮力计算;
如果是22以上,可以一圈一圈(rotate circle)地计算反转90度之后的结果。
比如,对于下面5
5的数组:
在这里插入图片描述
首先设置一个数组tmp将框1中的数字保存起来,
然后计算翻转后框1(top layer)中的数字;
再计算翻转后框2(left layer)中的数字;
再依次计算框3,4中的数字,这样就完成了最外圈的反转。
最外圈翻转之后的结果为:
在这里插入图片描述

接下来进行递归,对内层的圈进行相同的操作。

提交代码:

class Solution{
	public void rotate(int[][] matrix) {
		for(int i=0;i<matrix.length/2;i++) {
			rotateCircle(matrix,i,i,matrix.length-2*i);
		}
	}
	
	public void rotateCircle(int[][] matrix,int r,int c,int size) {
		if(size==2) {
			int tmp=matrix[r][c];
			matrix[r][c]=matrix[r+1][c];
			matrix[r+1][c]=matrix[r+1][c+1];
			matrix[r+1][c+1]=matrix[r][c+1];
			matrix[r][c+1]=tmp;
            return;
		}
		
		int tmp[]=new int[size];
		for(int i=0;i<tmp.length;i++)
			tmp[i]=matrix[r][r+i];
		
		//update the upper layer
		for(int i=0;i<size;i++) 
			matrix[r][r+size-1-i]=matrix[r+i][c];
		
		//update the left layer
		for(int i=1;i<size;i++) 
			matrix[r+i][c]=matrix[r+size-1][c+i];
		
		//update the bottom layer
		for(int i=1;i<size-1;i++) 
			matrix[r+size-1][c+i]=matrix[r+size-i-1][c+size-1];
		matrix[r+size-1][c+size-1]=tmp[tmp.length-1];
		
		//update the right layer
		for(int i=1;i<size-1;i++) {
			matrix[r+i][c+size-1]=tmp[i];
		}
	}
	
}

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值