chacha22 发表于 2022-7-8 00:27:46

顺时针遍历矩阵一题里面一行代码看不懂,求教

https://fishc.com.cn/thread-178186-1-3.html
matrix = [,
          ,
          ]
   
rows = len(matrix)
cols = len(matrix)
   
left = 0
right = cols - 1
top = 0
bottom = rows - 1
   
result = []
   
while left <= right and top <= bottom:
    # 从左往右遍历
    for col in range(left, right + 1):
      result.append(matrix)
   
    # 从上往下遍历
    for row in range(top + 1, bottom + 1):
      result.append(matrix)
   
    if left < right and top < bottom:
      # 从右往左遍历
      for col in range(right - 1, left, -1):
            result.append(matrix)
   
      # 从下往上遍历
      for row in range(bottom, top, -1):
            result.append(matrix)
   
    left = left + 1
    right = right - 1
    top = top + 1
    bottom = bottom - 1
   
print(result)

为什么要加这句,外面大的条件不是已经写明了,left<= right以及top 小于等于bottom么

wp231957 发表于 2022-7-8 08:42:49

这东西也有的叫 蛇形矩阵
就是从外向内 一圈一圈的回旋直到最后一个元素
你可以自己实现一下   然后再对比一下   

chacha22 发表于 2022-7-8 10:16:38

wp231957 发表于 2022-7-8 08:42
这东西也有的叫 蛇形矩阵
就是从外向内 一圈一圈的回旋直到最后一个元素
你可以自己实现一下   然后再 ...

好,谢谢。看来只有再自己走一遍了。

lightninng 发表于 2022-7-9 21:52:19

不知道楼主,找到原因没有,提供一下思路:
可以看到在while循环体的代买中,if语句前面的四条语句并没有修改left、right、top和bottom四个变量的值,所以但从判断条件可以知道,if 语句为了将 left=right或top=bottom这个特殊情况下做不一样的处理,至于有什么不一样,自己脑子里面把代码跑一下应该就有答案

chacha22 发表于 2022-7-10 21:09:02

lightninng 发表于 2022-7-9 21:52
不知道楼主,找到原因没有,提供一下思路:
可以看到在while循环体的代买中,if语句前面的四条语句并没有 ...

谢谢,我用笔画了下,这样可以在最后一次遍历的时候,不让它往回遍历。
页: [1]
查看完整版本: 顺时针遍历矩阵一题里面一行代码看不懂,求教