某比赛小记5- 螺旋遍历矩阵

Posted chmod777

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了某比赛小记5- 螺旋遍历矩阵相关的知识,希望对你有一定的参考价值。

题目:给定一个二维矩阵,从[0][0]开始向右,按顺时针遍历全部数据,比如[[a,b][c,d]],遍历顺序就是a,b,d,c。最后将遍历的元素用逗号连接,打印整个遍历结果。给定二维矩阵见文件。

题解:本题思路很容易设计,就是每次访问越界或者是访问到已经访问的元素就向右转向,当右边没有路了则结束。难点主要是边界条件的处理。

python版本:

m = [给定矩阵]
#利用numpy构造二维全0数组
# tagnp = np.zeros(32*32)
# tagnp = tagnp.reshape(32,32)
# tagnp = tagnp.astype(int)
# tag = tagnp.tolist()
#直接构造二维全零数组
tag = [[0 for i in range(32)] for j in range(32)]  #用来存储元素是否访问过
i = 0  #当前访问元素下标记录
j = 0  #当前访问元素下标记录
ret = [] #保存访问的结果
ret.append(m[i][j])
tag[i][j] = 1
while (j+1<32 and tag[i][j+1]==0) or (i+1<32 and tag[i+1][j]==0) or (j-1>=0 and tag[i][j-1]==0) or (i-1 >=0 and tag[i-1][j]==0):
    #右
    while j+1 < 32 and tag[i][j+1] == 0:
        ret.append(m[i][j+1])
        tag[i][j+1] = 1
        j += 1
    while i+1 < 32 and tag[i+1][j] == 0:
        ret.append(m[i+1][j])
        tag[i+1][j] = 1
        i += 1
    while j-1>=0 and tag[i][j-1] == 0:
        ret.append(m[i][j-1])
        tag[i][j-1] = 1
        j -= 1
    while i-1>=0 and tag[i-1][j] == 0:
        ret.append(m[i-1][j])
        tag[i-1][j] = 1
        i -= 1
retstrlist = [] #把结果转成str,比赛时过于紧张忘记使用map()
for mi in ret:
    retstrlist.append(str(mi))
print(retstrlist)
fret = ‘,‘.join(retstrlist)
fret.replace(‘ ‘,‘‘)
print(fret) #最终结果

  

以上是关于某比赛小记5- 螺旋遍历矩阵的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode-54. Spiral Matrix

59. 螺旋矩阵 II-内环模拟遍历

LeetCode之螺旋矩阵

ruby 以螺旋顺序打印或遍历矩阵

代码题(37)— 螺旋矩阵

ACM之螺旋矩阵