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 取小 就可以了

猜你喜欢

转载自blog.csdn.net/weixin_38616850/article/details/106415131