牛客网上的剑指 offer的在线编程:
题目描述:
方法一:每次取二维列表的第一项,然后删除第一项,逆时针旋转二维列表,重复上述操作
# -*- coding:utf-8 -*-
'''
顺时针打印矩阵
题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
'''
class Solution:
# matrix类型为二维列表,需要返回列表
def printMatrix(self, matrix):
if len(matrix) == 0:
return []
res = []
number = len(matrix) * len(matrix[0])
res.extend(matrix[0])
while len(res) < number:
matrix.pop(0)
matrix = self.turn(matrix)
res.extend(matrix[0])
return res
def turn(self, mat):
if len(mat) == 0:
return
turned_lst = [([0] * len(mat)) for i in range(len(mat[0]))]
for i in range(len(mat)):
for j in range(len(mat[0])):
turned_lst[j][i] = mat[i][len(mat[0]) - 1 - j]
return turned_lst
方法二:
# -*- coding:utf-8 -*-
import numpy as np
class Solution:
# matrix类型为二维列表,需要返回列表
def printMatrix(self, matrix):
# write code here
all = []
x, y = matrix.shape
print x, y
print matrix
for k in range(x + y):
all.append(matrix[0])
b = matrix[1:, ]
m, n = b.shape
print m, n
c = np.arange(m * n).reshape((n, m))
for i in range(m):
for j in range(n):
c[j][i] = b[i][n - 1 - j]
matrix = c
print matrix
print len(matrix)
if len(matrix) == 1:
all.append(matrix[0])
break
return all