leetcode题解-旋转图像(详细)

代码

var rotate = function(matrix) {
	let l = matrix.length;
	for(let i=0;i<parseInt((l+1)/2);i++){
		for(let j =0;j<parseInt(l/2);j++){
			let temp = matrix[l - 1 - j][i];
			matrix[l - 1 - j][i] = matrix[l - 1 - i][l - 1 - j];
			matrix[l - 1 - i][l - j - 1] = matrix[j][l - 1 -i];
			matrix[j][l - 1 - i] = matrix[i][j];
			matrix[i][j] = temp;
		}
	}
};

思路

在这里插入图片描述
旋转实际上就是每个点对应四个位置的旋转 。
所以首先计算 这四个点对应的坐标关系 就可以实现一次交换
假设第一个点的坐标是 (i,j),整个长度是l
我们可以理解为四个点都是从四个顶点偏移得到
那么第二个点的 纵坐标 应该是和第一个点的横坐标相等的 因为偏移量是一样的
而横坐标则是距离边界的距离所以是 l-1-j
所以第二点的坐标 (l-1-j,i)
以此类推
得到四个点的坐标
那么完成交换就只需要一个辅助变量

完成整体的旋转要旋转多少个点呢
看下图

在这里插入图片描述
因为实际上只需要旋转一个分点 就覆盖到了整个区域
奇数偶数有区别 i 方向都是 (n+1)/2 j方向 n/2 取小 就可以了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值