面试题29. 顺时针打印矩阵

Easy

思路

  • 按着题目理解的方式进行遍历
  • 一圈分成4个步骤,代码使用 %4 来区分步骤
  • 一圈结束后,要向内圈缩进一格
  • 遍历次数为m * n

代码

python3

  1. class Solution:
  2. def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
  3. if len(matrix) == 0:
  4. return []
  5. r = []
  6. m = len(matrix)
  7. n = len(matrix[0])
  8. count = 0
  9. i = 0
  10. j = 0
  11. for k in range(m * n):
  12. #print((i,j))
  13. r.append(matrix[i][j])
  14. if count % 4 == 0:
  15. if j < (n - 1 - int(count / 4)):
  16. j +=1
  17. else:
  18. i+=1
  19. count += 1
  20. elif count % 4 == 1:
  21. if i < (m - 1 - int(count / 4)):
  22. i +=1
  23. else:
  24. j-=1
  25. count +=1
  26. elif count % 4 == 2:
  27. if j > int(count / 4):
  28. j-=1
  29. else:
  30. i-=1
  31. count +=1
  32. else:
  33. if i> int(count/4) + 1:
  34. i-=1
  35. else:
  36. j+=1
  37. count +=1
  38. return r