Python 解螺旋数组

最近闲的时候看python,想想看了几天,也需要实践一下;
以下是摘自微信公众号
Crossin的编程教室

【每周一坑】罗马数组转换

N 为 4 的螺旋数组如图所示:

螺旋数组

输入一个正整数 N,输出以 N 为边长的螺旋矩阵。(比如上图就是 N 为 4 的结果)

其实所有的方案都是直接摘抄下来的,算是写的第一个python程序吧。

#coding=UTF-8

#解决python end = ‘ ’ 在2.x上的兼容问题
from __future__ import print_function
class Spiral:
    def __init__(self, N):
        #构造一个二维数组
        self.matrix = [[None for i in range(N)] for j in range(N)]
        #起始位置
        self.row = 0
        self.col = 0
        #数组的边界值
        self.max_row = N
        #更换方向标记
        self.mark = 0

    #获取数组的运动方向
    def direction(self, mark):
        around = [
                  [self.row, self.col+1],   #向右
                  [self.row+1, self.col],   #向下
                  [self.row, self.col-1],   #向左
                  [self.row-1, self.col]    #向上
            ]
        return around[mark%4]

#根据当前位置,获取下一个位置
# 如果是边界更换方向
# 如果下一个元素已经有了同样也要更换方向
    def next(self):
        #获取下一个位置
        i = self.direction(mark=self.mark)
        #判断是不是赋值和越界,如果没有,赋值螺旋数组上的数组位置值
        if -1 not in i and self.max_row not in i:
            if self.matrix[i[0]][i[1]] is None:
                #赋值self.row = i[0],self.col = i[1]
               self.row,self.col = i
               return None
        #更换方向
        self.mark +=1
        return self.next()

    def solution(self):
        for i in range(1,self.max_row**2+1):
            #行列赋值
            self.matrix[self.row][self.col] = i
            #结束
            if i == self.max_row**2:
                break
            self.next()
        #打印结果
        for r in self.matrix:
            for c in r:
                print('{0:^{1}}'.format(c,4),end = ' ')
            print('\n')

    def solution2(self):
        n = self.max_row;
        #对二维数组赋值
        a = [[0 for i in range(1, n+1)] for j in range(1,n+1)]
        x, y, i, j = 0, 0, 0, 0
        while a[i][j] == 0:
            y += 1
            a[i][j] = y
            #方向:right,可以向右移动(j< n-1) 并且 右侧的一个位置没有赋值( a[i][j+1] == 0)
            #是第一行或者(不是第一行但上一行已经有值了)
            if j < n-1 and a[i][j+1] == 0 and (i == 0 or i > 0 and a[i-1][j] != 0):
                j += 1
            #方向:down,可以向下移动(i < n-1)并且 下侧的位置没有赋值(a[i+1][j] == 0)
            elif i < n-1 and a[i+1][j] == 0:
                i += 1
             #方向:left,可以向左移动(j > 0)并且 左侧的位置没有赋值(a[i][j-1] == 0)
            elif j > 0 and a[i][j-1] == 0:
                j -= 1
             #方向:up,可以向上移动(i > 0)并且 左侧的位置没有赋值(a[i-1][j] == 0)
            elif i > 0 and a[i-1][j] == 0:
                i -= 1
        #打印
        for b in a:
            for c in b:
                print('{0:^{1}}'.format(c, 4), end = ' ')
            print('\n')

if __name__ == '__main__':
    n = int(input(' 输入螺旋数组最大行数 \n >>> '))
    s = Spiral(n)
    #方案1
    #s.solution()
     #方案2
    s.solution2()
            
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容