You are given an n x n 2D matrix representing an image.
Rotate the image by 90 degrees (clockwise).
Follow up:
Could you do this in-place?
给定一个nXn的二维矩阵,按时钟方向旋转90度,不能使用额外的数据结构
从外向内逐层旋转
class Solution { public: void rotateMatrix(vector<vector<int> >&matrix, int i, int j, int len){ //逐层旋转 //i,j 为当前层的左上角坐标 //len 为当前层的边长 if(len<=1)return; //上边界第一个位置的坐标, 上边通过y_top递增1来访问后续位置 int x_top=i, y_top=j; //右边界第一个位置的坐标,右边界通过x_right递增1来访问后续位置 int x_right=i, y_right=j+len-1; //下边界第一个位置的坐标,下边界通过y_bottom递减1来访问后续位置 int x_bottom=i+len-1, y_bottom=j+len-1; //左边界第一个位置的坐标,左边界通过x_left递减1来访问后续位置 int x_left=i+len-1, y_left=j; while(y_top<j+len-1){ //四个边界上对应位置顺时针轮换 int temp=matrix[x_top][y_top]; matrix[x_top][y_top]=matrix[x_left][y_left]; matrix[x_left][y_left]=matrix[x_bottom][y_bottom]; matrix[x_bottom][y_bottom]=matrix[x_right][y_right]; matrix[x_right][y_right]=temp; //指向各边的下一个位置 y_top++; x_right++; y_bottom--; x_left--; } } void rotate(vector<vector<int> > &matrix) { int len=matrix.size(); int i=0, j=0; while(len>1){ rotateMatrix(matrix, i, j, len); i++; j++; len-=2; } } };
LeetCode: Rotate Image [047],布布扣,bubuko.com
原文:http://blog.csdn.net/harryhuang1990/article/details/26619707