1.问题描述
顺时针从外到里输出一个矩阵,比如下面这个矩阵,我们的输出应该是1->2->3->6->9->8->7->4->5。
1 | 2 | 3 |
4 | 5 | 6 |
7 | 8 | 9 |
2.问题分析
我们可以采用削边旋转法,这种思路的好处在于规律十分简单,不需要花心思去进行复杂的下标推算,利用迭代,充分利用计算机的优势。
step1:削掉了第一行,输出1->2->3
4 | 5 | 6 |
7 | 8 | 9 |
step2:逆时针旋转90度
6 | 9 |
5 | 8 |
4 | 7 |
step3:削掉第一行,输出6->9
5 | 8 |
4 | 7 |
step4:逆时针旋转90度
8 | 7 |
5 | 4 |
step4:逆时针旋转90度
5 | 4 |
step6:逆时针旋转90度
4 |
5 |
step7:削掉第一行,输出4
5 |
step8:逆时针旋转90度
5 |
step:9削掉第一行,输出5
3.问题解决
class Solution:
# matrix类型为二维列表,需要返回列表
def printMatrix(self, matrix):
# write code here
result = []
while(matrix):
result+=matrix.pop(0)
if not matrix or not matrix[0]:
break
matrix = self.turn(matrix)
return result
def turn(self,matrix):
num_r = len(matrix)
num_c = len(matrix[0])
newmat = []
for i in range(num_c):
newmat2 = []
for j in range(num_r):
newmat2.append(matrix[j][i])
newmat.append(newmat2)
newmat.reverse()
return newmat
4.参考资料
1)https://www.nowcoder.com/profile/118878717/codeBookDetail?submissionId=39699791