每日kata~07~Snail
2020-05-07 本文已影响0人
Lacia
题目
Snail Sort
Given an n x n array, return the array elements arranged from outermost elements to the middle element, traveling clockwise.
array = [[1,2,3],
[4,5,6],
[7,8,9]]
snail(array) #=> [1,2,3,6,9,8,7,4,5]
For better understanding, please follow the numbers of the next array consecutively:
array = [[1,2,3],
[8,9,4],
[7,6,5]]
snail(array) #=> [1,2,3,4,5,6,7,8,9]
我的笨蛋解法
def snail(snail_map):
if len(snail_map[0]):
res = []
print(snail)
length = len(snail_map)
n = length//2
for i in range(0,n):
for j in range(i,length-i):
res.append(snail_map[i][j])
for j in range(i+1,length-i):
res.append(snail_map[j][length-i-1])
for j in range(i+1,length-i):
res.append(snail_map[length-i-1][length-j-1])
for j in range(i+1,length-i-1):
res.append(snail_map[length-j-1][i])
if length%2:
res.append(snail_map[n][n])
else:
res = []
return res
大神的解法
<e.g>
将矩阵逆时针旋转90度,取第一行即是蛇形遍历的顺序,大神妙啊!
def snail(array):
a = []
while array:
a.extend(list(array.pop(0)))
array = list(zip(*array))
array.reverse()
return a
知识点
lt.append() vs lt.extend()
append()方法是将对象整体加到list尾部
extend()方法是将可迭代对象中的每一个元素逐个加到list中
所以说,extend的对象必须是可迭代对象
zip()
参数为可迭代对象,将对象中对应的元素打包成一个元组返回
各对象长度不一致时,取最短的对象的长度
lt.pop(0)
弹出最早放入列表的元素
2个参数的for循环—使用zip方法
for (i,j) in zip(range(0,2),range(0,3))