LeetCode 48. Rotate Image二维矩阵90度翻转问题,坐标推算,空间利用

xiaoxiao2021-02-28  59

题意: 90度翻转二维矩阵,且要求额外空间开销尽可能地小。

思路:弄清楚90度翻转时,每个点翻转的规律即可

假设该点的行列坐标为  (x, y)

则翻转后他的位置为  (y,n-1-x)

而这里要求空间开销小,即不应重建一个新矩阵。

则我们应当一个个点去翻转。

我用num1存当前点的值,num2为翻转后位置处的值

令下一点值 = 当前的值

接着继续这个过程,进行4次后, 一次翻转完毕,一次翻转 翻转了4个数字。

注意每次翻转的起始位置,i=k, j=k ->   n-1-k

当i<n/2时,不需要再翻转。

class Solution { public: void change(int i,int j, vector<vector<int>>& matrix){ int nj,ni,n,num1,num2,m ; n = matrix.size(); m = 4; num1 = matrix[i][j]; while(m--){ ni = j; nj = n - 1 - i; num2 = matrix[ni][nj]; matrix[ni][nj] = num1; i = ni;j = nj; num1 = num2; } } void rotate(vector<vector<int>>& matrix) { // 0 1-> 1 3-> 3 2-> 2 0 int n = matrix.size(); int temp,k = 0, m; int num1, num2; int i, j, ni, nj; i = 0; while(i < n/2 ){ for(j = i;j < n - i - 1;j++){ change(i,j,matrix); } i++; } return ; } };

转载请注明原文地址: https://www.6miu.com/read-2614426.html

最新回复(0)