'''
Level: Medium  Tag: Matrix

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, which means you have to modify the input 2D matrix directly.

DO NOT allocate another 2D matrix and do the rotation.


Example 1:

"../../../Material/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:

"../../../Material/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:

n == matrix.length == matrix[i].length
1 <= n <= 20
-1000 <= matrix[i][j] <= 1000


'''



'''
先沿著對角線轉一次
再一次把每個子陣列反轉
即為所求
'''


class Solution(object):
    def rotate(self, matrix):
        """
        :type matrix: List[List[int]]
        :rtype: None Do not return anything, modify matrix in-place instead.
        """


        n = len(matrix)

        for i in range(n):
            for j in range(i+1, n):
                matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]

        for i in range(n):
            matrix[i] = matrix[i][::-1]


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

Solution().rotate(matrix)