旋转图像

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

将图像顺时针旋转 90 度。

说明:

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

示例 1:

给定 matrix = 
[
  [1,2,3],
  [4,5,6],
  [7,8,9]
],

原地旋转输入矩阵,使其变为:
[
  [7,4,1],
  [8,5,2],
  [9,6,3]
]

解题思路:

刚开始没有想到,后来看过提示才恍然大悟,感觉这一类题目还是要注意观察图像的特征,把操作进行逐步分解,这样就把原地旋转分解为上下行互换、和对角线互换两个步骤,接下来就很容易了。

	public static void rotate(int[][] matrix) {
//		System.out.println(matrix.length);
		int a = 0;
		//第一步,上下互换
		for(int i=0;i<matrix.length/2;i++){
			for(int j=0;j<matrix.length;j++){
				//第一行和最后一行互换,第二行和倒数第二行互换,以此类推
				a = matrix[i][j];
				matrix[i][j] = matrix[matrix.length-(i+1)][j];
				matrix[matrix.length-(i+1)][j] = a;
			}
		}
		//第二步,对角线互换
		for(int i=0;i<matrix.length;i++){
			for(int j=i;j<matrix.length;j++){//每次进行到下一行的时候,要把已经换过的部分忽略掉!
				if(i!=j){
				//对角线上的元素互换,a12=a21,a13=a31,以此类推
				a = matrix[i][j];
				matrix[i][j] = matrix[j][i];
				matrix[j][i] = a;
				}
			}
		}
		//查看结果
		for(int i=0;i<matrix.length;i++){
			for(int j=0;j<matrix.length;j++){
				System.out.printf(matrix[i][j]+",");
			}
			System.out.println("\n");
		}
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值