题目:给定一个二维矩阵,从[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) #最终结果
原文:https://www.cnblogs.com/chmod777/p/9975740.html