Skip to content

49. Group Anagrams

难度: Medium

刷题内容

原题连接

  • https://leetcode.com/problems/rotate-image/submissions/

内容描述

``` 给你一个矩阵,让你顺时针旋转90° 思路: 不讨论复制一个数组然后在旋转的方法,因为太简单了。 下面的方法都是in-place的:。

示例:

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

输出: [ [7,4,1], [8,5,2], [9,6,3] ] 说明:

必须直接修改输入的2D矩阵。 不要分配另一个2D矩阵并进行旋转。 ```

解题方案

思路 1

直接设置top, bottom, left, right四个变量,表示圈定当前要旋转的正方形范围,
然后按偏移计算位置,比如左上角的先和右上角交换,然后继续左上角和右下角交换这样即可.
class Solution {
public:
    void rotate(vector<vector<int>>& matrix) {
        if(matrix.empty())
            return;
        int top = 0, bottom = matrix.size() - 1;
        int left = 0, right = matrix[0].size() - 1;
        for(;top < bottom && left < right; ++top, ++left, --bottom, --right){
            for(int i = left; i < right; ++i){
                int dis = i - left;

                int row = top + dis;
                int col = right;
                swap(matrix[top][i], matrix[row][col]);

                row = bottom;
                col = right - dis;
                swap(matrix[top][i], matrix[row][col]);

                row = bottom - dis;
                col = left;
                swap(matrix[top][i], matrix[row][col]);
            }
        }
    }
};

我们一直在努力

apachecn/AiLearning

【布客】中文翻译组