LeetCode 48 Rotate Image

来源:互联网 发布:阿里云怎么提现 编辑:程序博客网 时间:2024/05/30 22:46

题意:

将一个正方形矩阵顺时针旋转90度。


思路:

2种方式——

1.正常想法 —— 先对角线对称,再左右对称。 代码9ms。

2.迷之规律 —— 在正方形里面画一个叉,分成的4个三角形相互替换。 代码6ms。


代码:

/** * 迷之规律 —— 在正方形里面画一个叉,分成的4个三角形相互替换。 6ms */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 - i - 1; ++j) {                swap(matrix[i][j], matrix[j][n - i - 1]);                swap(matrix[i][j], matrix[n - i - 1][n - j - 1]);                swap(matrix[i][j], matrix[n - j - 1][i]);            }        }    }};/** * 正常想法 —— 先对角线对称,再左右对称。 9ms */class Solution {public:    void rotate(vector<vector<int>> &matrix) {        int n = matrix.size();        for (int i = 0; i < n; ++i) {            for (int j = i + 1; j < n; ++j) {                swap(matrix[i][j], matrix[j][i]);            }        }        for (int i = 0; i < n; ++i) {            for (int j = 0; j < n / 2; ++j) {                swap(matrix[i][j], matrix[i][n - j - 1]);            }        }    }};