leetcode 48 旋转图像 LC

一道典型的LC数组题

题目要求原地顺时针旋转90度, 一开始就联想到了矩阵的转置,但是矩阵的转置是沿着对角线交换而非旋转。

解法一:
但是在纸上演算,发现转置后,沿着矩阵的中线 按列对称交换刚好是旋转90度。
在这里插入图片描述
个人觉得实现难度小 且能击败100%

class Solution {
    public void rotate(int[][] matrix) {
        //转置
		for (int i = 0; i < matrix.length; i++) {
			for (int j = i; j < matrix[0].length; j++) {
				if(i!=j) {
					int temp = matrix[i][j];
					matrix[i][j] = matrix[j][i];
					matrix[j][i] = temp;
				}
			}
		}
		//沿中线按列交换 其实就是逆序而已别想的太高大上
		for (int i = 0; i < matrix.length; i++) {
			int l=0,r=matrix.length-1;
			while(l<r) {
				int temp = matrix[i][l];
				matrix[i][l] = matrix[i][r];
				matrix[i][r] = temp;
				l++;
				r--;
			}
		}
    }
}

解法二:
当然其实如果只是单纯的面试想过题,暴力法也也是不错的选择,以下是代码是官方题解

class Solution {
    public void rotate(int[][] matrix) {
        int n = matrix.length;
        int[][] matrix_new = new int[n][n];
        //创建一个新数组 , 按列遍历(矩阵是n*n,按行遍历交换i j位置即可), 逆序复制到新数组中
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < n; ++j) {
                matrix_new[j][n - i - 1] = matrix[i][j];
            }
        }
        //把新数组中的数据 复制到原来的数组中去
        //一手掩耳盗铃就可以骗过判题系统而且击败100%
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < n; ++j) {
                matrix[i][j] = matrix_new[i][j];
            }
        }
    }
}

解法三:
看到题目是旋转后直接联想到到了之前的一题 环路交换题,本题相对简单,以一个元素开始的旋转必定是4次,从外到内 一圈一圈的旋转。
官方题解上有,这个代码我自己也不是很懂就不贴了,有兴趣的可以看官方题解
在这里插入图片描述

算法记录贴, 不是自己写的代码都有说明,算法新手,代码有问题欢迎指正!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值