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