the idea is to go from outer layer to more inside layers.

for example, if matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]], the outermost layer is comprised of 1,2,3,4,8,12,16,15,14,13,9,5; the inside layer is 6,7,11,10; etc.

This method is actually more efficient than the 'first reverse up to down, then swap the symmetry' method because no element will swapped more than once.

```
class Solution(object):
def rotate(self, matrix):
"""
:type matrix: List[List[int]]
:rtype: void Do not return anything, modify matrix in-place instead.
"""
n = len(matrix)
for i in xrange(n/2):
for j in xrange(i,n-1-i):
temp = matrix[i][j]
matrix[i][j] = matrix[n-1-j][i]
matrix[n-1-j][i] = matrix[n-1-i][n-1-j]
matrix[n-1-i][n-1-j] = matrix[j][n-1-i]
matrix[j][n-1-i] = temp
```