题目描述:
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 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.
思路:
Python实现:
// An highlighted block
class Solution:
# matrix类型为二维列表,需要返回列表
def printMatrix(self, matrix):
# write code here
x0 = y0 = 0
xn = len(matrix)-1
yn = len(matrix[0])-1
list = []
while x0 <=xn and y0<= yn:
for y in range(y0, yn+1):
list.append(matrix[x0][y])
for x in range(x0+1, xn+1):
list.append(matrix[x][yn])
if x0 < xn:
for y in range(yn-1, y0-1, -1):
list.append(matrix[xn][y])
if y0 < yn:
for x in range(xn-1,x0,-1):
list.append(matrix[x][y0])
x0 += 1
y0 += 1
xn -= 1
yn -= 1
return list
python实现2:
// An highlighted block
class Solution:
# matrix类型为二维列表,需要返回列表
def printMatrix(self, matrix):
# write code here
res = []
n = len(matrix)
m = len(matrix[0])
if n == 1 and m == 1:
res = [matrix[0][0]]
return res
for o in xrange((min(m,n)+1)//2):
[res.append(matrix[o][i]) for i in xrange(o,m-o)]
[res.append(matrix[j][m-1-o]) for j in xrange(o,n-o) if matrix[j][m-1-o] not in res]
[res.append(matrix[n-1-o][k]) for k in xrange(m-1-o,o-1,-1) if matrix[n-1-o][k] not in res]
[res.append(matrix[l][o]) for l in xrange(n-1-o,o-1,-1) if matrix[l][o] not in res]
return res
Python实现3:
可以模拟魔方逆时针旋转的方法,一直做取出第一行的操作
例如
1 2 3
4 5 6
7 8 9
输出并删除第一行后,再进行一次逆时针旋转,就变成:
6 9
5 8
4 7
继续重复上述操作即可。
// An highlighted block
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