Leetcode48. Rotate Image

来源:互联网 发布:小米平板2win10版优化 编辑:程序博客网 时间:2024/06/05 08:42

题目

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?

思路

先上下颠倒,在对角线颠倒
/*
* clockwise rotate
* first reverse up to down, then swap the symmetry
* 1 2 3 7 8 9 7 4 1
* 4 5 6 => 4 5 6 => 8 5 2
* 7 8 9 1 2 3 9 6 3
*/

测试用力

[][1][1,2,3 4,5,6 7,8,9]

代码

package leetcodeArray;public class Leetcode48RotateImage {    public void rotate(int[][] matrix) {        int N = matrix.length;        for(int i = 0; i < N / 2; i++){            for(int j = 0; j < matrix[i].length; j++){                int temp = matrix[i][j];                matrix[i][j] = matrix[N - i - 1][j];                matrix[N - i - 1][j] = temp;            }        }        for(int i = 0; i < matrix.length; i++){            for(int j = i; j < matrix[i].length; j++){                int temp = matrix[i][j];                matrix[i][j] = matrix[j][i];                matrix[j][i] = temp;            }        }    }}

结果

这里写图片描述

他山之玉

/* * clockwise rotate * first reverse up to down, then swap the symmetry  * 1 2 3     7 8 9     7 4 1 * 4 5 6  => 4 5 6  => 8 5 2 * 7 8 9     1 2 3     9 6 3*/void rotate(vector<vector<int> > &matrix) {    reverse(matrix.begin(), matrix.end());    for (int i = 0; i < matrix.size(); ++i) {        for (int j = i + 1; j < matrix[i].size(); ++j)            swap(matrix[i][j], matrix[j][i]);    }}/* * anticlockwise rotate * first reverse left to right, then swap the symmetry * 1 2 3     3 2 1     3 6 9 * 4 5 6  => 6 5 4  => 2 5 8 * 7 8 9     9 8 7     1 4 7*/void anti_rotate(vector<vector<int> > &matrix) {    for (auto vi : matrix) reverse(vi.begin(), vi.end());    for (int i = 0; i < matrix.size(); ++i) {        for (int j = i + 1; j < matrix[i].size(); ++j)            swap(matrix[i][j], matrix[j][i]);    }}
class Solution:    def rotate(self, A):        n = len(A)        for i in range(n/2):            for j in range(n-n/2):                A[i][j], A[~j][i], A[~i][~j], A[j][~i] = \                         A[~j][i], A[~i][~j], A[j][~i], A[i][j]
原创粉丝点击