赞
踩
给定一个n x n 的 metrix,对其进行90度的旋转。只能在原矩阵中进行操作。
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[[7,4,1],[8,5,2],[9,6,3]]
原题链接:https://leetcode-cn.com/problems/rotate-image/
因为 metrix 是一个 n x n 的结构,可以由外圈到内圈进行处理即可,圈数为 n/2,第 i 层的边长为 n - 2 * i。
旋转的过程,可以理解为,每一次将四个数依次进行位置变换,比如 1、3、9、7;2、6、8、4。转移方程为 matrix[x][y] -> matrix[y][n-1-x]
当 n 为奇数时,内圈只有一个数字,无需进行处理。
class Solution { public: void rotate(vector<vector<int>>& matrix) { int n = matrix.size(); for (int i = 0; i < n / 2; i++) { for (int j = i; j < n - 1 - i; j++) { int x = i; int y = j; int x_next, y_next; int pre = matrix[x][y]; for (int time = 0; time < 4; time++) { x_next = y; y_next = n - 1 - x; int temp = matrix[x_next][y_next]; matrix[x_next][y_next] = pre; pre = temp; x = x_next; y = y_next; } } } } };
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。