kata

每日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))

上一篇 下一篇

猜你喜欢

热点阅读