# Leetcode Rotate-Image 2022-09-02 15:40 > ##### Algorithms: > #algorithm #math > ##### Data structures: > #DS #array > ##### Difficulty: > #coding_problem #difficulty-medium > ##### Additional tags: > #leetcode #CS_list_need_understanding > ##### Revisions: > N/A ##### Links: - [Link to problem](https://leetcode.com/problems/rotate-image/) - [Solution and explanation](https://leetcode.com/problems/rotate-image/solution/) ___ ### Problem You are given an `n x n` 2D `matrix` representing an image, rotate the image by **90** degrees (clockwise). You have to rotate the image [**in-place**](https://en.wikipedia.org/wiki/In-place_algorithm), which means you have to modify the input 2D matrix directly. **DO NOT** allocate another 2D matrix and do the rotation. #### Examples **Example 1:** ![](https://assets.leetcode.com/uploads/2020/08/28/mat1.jpg) ``` **Input:** matrix = [[1,2,3],[4,5,6],[7,8,9]] **Output:** [[7,4,1],[8,5,2],[9,6,3]] ``` **Example 2:** ![](https://assets.leetcode.com/uploads/2020/08/28/mat2.jpg) ``` **Input:** matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]] **Output:** [[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]] ``` #### Constraints ### Thoughts > [!summary] > This is a #math problem. Mainly two ways #### Method 1: rotate in rings #TODO complete in this method. #### Method 2: transpose and reflect transpose reflects the matrix in `y = x`, reflect changes matrix in axis y ### Solution ```cpp class Solution { void reflect(vector> &mat) { // reflect in y axis. int n = mat.size(); for (int i = 0; i < n; i++) { for (int j = 0, half = n / 2; j < half; j++) { swap(mat[i][j], mat[i][n - j - 1]); } } } void transpose(vector> &mat) { int n = mat.size(); for (int i = 0; i < n; i++) { for (int j = 0; j < i; j++) { swap(mat[i][j], mat[j][i]); } } } public: void rotate(vector> &matrix) { // transpose and reflect transpose(matrix); reflect(matrix); } }; ```