Skip to content

Commit 3b2738e

Browse files
obelisk0114cclauss
authored andcommitted
Add rotate matrix problem (TheAlgorithms#1021)
* Add rotate matrix problem * Fix doctest * Adding return matrix to enable doctest
1 parent 628794d commit 3b2738e

File tree

1 file changed

+99
-0
lines changed

1 file changed

+99
-0
lines changed

matrix/rotate_matrix.py

+99
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
# -*- coding: utf-8 -*-
2+
3+
"""
4+
In this problem, we want to rotate the matrix elements by 90, 180, 270 (counterclockwise)
5+
Discussion in stackoverflow:
6+
https://stackoverflow.com/questions/42519/how-do-you-rotate-a-two-dimensional-array
7+
"""
8+
9+
10+
def rotate_90(matrix: [[]]):
11+
"""
12+
>>> rotate_90([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]])
13+
[[4, 8, 12, 16], [3, 7, 11, 15], [2, 6, 10, 14], [1, 5, 9, 13]]
14+
"""
15+
16+
transpose(matrix)
17+
reverse_row(matrix)
18+
return matrix
19+
20+
21+
def rotate_180(matrix: [[]]):
22+
"""
23+
>>> rotate_180([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]])
24+
[[16, 15, 14, 13], [12, 11, 10, 9], [8, 7, 6, 5], [4, 3, 2, 1]]
25+
"""
26+
27+
reverse_column(matrix)
28+
reverse_row(matrix)
29+
30+
"""
31+
OR
32+
33+
reverse_row(matrix)
34+
reverse_column(matrix)
35+
"""
36+
37+
return matrix
38+
39+
40+
def rotate_270(matrix: [[]]):
41+
"""
42+
>>> rotate_270([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]])
43+
[[13, 9, 5, 1], [14, 10, 6, 2], [15, 11, 7, 3], [16, 12, 8, 4]]
44+
"""
45+
46+
transpose(matrix)
47+
reverse_column(matrix)
48+
49+
"""
50+
OR
51+
52+
reverse_row(matrix)
53+
transpose(matrix)
54+
"""
55+
56+
return matrix
57+
58+
59+
def transpose(matrix: [[]]):
60+
matrix[:] = [list(x) for x in zip(*matrix)]
61+
return matrix
62+
63+
64+
def reverse_row(matrix: [[]]):
65+
matrix[:] = matrix[::-1]
66+
return matrix
67+
68+
69+
def reverse_column(matrix: [[]]):
70+
matrix[:] = [x[::-1] for x in matrix]
71+
return matrix
72+
73+
74+
def print_matrix(matrix: [[]]):
75+
for i in matrix:
76+
print(*i)
77+
78+
79+
if __name__ == '__main__':
80+
matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]
81+
print("\norigin:\n")
82+
print_matrix(matrix)
83+
rotate_90(matrix)
84+
print("\nrotate 90 counterclockwise:\n")
85+
print_matrix(matrix)
86+
87+
matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]
88+
print("\norigin:\n")
89+
print_matrix(matrix)
90+
rotate_180(matrix)
91+
print("\nrotate 180:\n")
92+
print_matrix(matrix)
93+
94+
matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]
95+
print("\norigin:\n")
96+
print_matrix(matrix)
97+
rotate_270(matrix)
98+
print("\nrotate 270 counterclockwise:\n")
99+
print_matrix(matrix)

0 commit comments

Comments
 (0)