首页 > 代码库 > LeetCode: Rotate Image [047]
LeetCode: Rotate Image [047]
【题目】
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; } } };
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。