LeetCode解题 Day16

54. Spiral Matrix

https://leetcode.com/problems/spiral-matrix/submissions/


题目解释

有一个m*n 大小的表格,请用螺旋的顺序回传表格内的值

example

https://i.imgur.com/YY0jLPg.png

解法

不管表格的大小如何,在表格上所谓的螺旋顺序,其实都可以看成4个方向的走向

都是从最左上方的位置往右走,接着依序往下、左、上、右...

接着,我们以example2 为范例,分别看4个方向的表格变化:

  • 右: matrix[0][0] -> matrix[0][1] -> matrix[0][2] -> matrix[0][3]
  • 下: matrix[1][3] -> matrix[2][3]
  • 左: matrix[2][2] -> matrix[2][1] -> matrix[2][0]
  • 上: matrix[1][0]

可以发现每个方向只有rowcolmun 有变化,所以我分别写出4个方向的数字变化

code

class Solution:
    def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
        
        m = len(matrix)
        n = len(matrix[0])
        
        start_i, end_i = 0, m - 1
        start_j, end_j = 0, n - 1
        
        ans = []
        while len(ans) < m * n:

            for j in range(start_j, end_j + 1): #往右
                ans.append(matrix[start_i][j])

            start_i += 1

            if len(ans) < m * n:
                for i in range(start_i, end_i + 1): #往下
                    ans.append(matrix[i][end_j])

                end_j -= 1

            if len(ans) < m * n:
                for j in range(end_j, start_j-1, -1): #往左
                    ans.append(matrix[end_i][j])

                end_i -= 1

            if len(ans) < m * n:
                for i in range(end_i, start_i-1, -1): #往上
                    ans.append(matrix[i][start_j])

                start_j += 1
        
        return ans
              

闲聊

像这种有2维阵列的题目我都觉得很麻烦,有时候都会写到脑袋空白

原因是什麽我也不确定,可能是和座标一直搞混吧

例如x轴上的座标是(0,0)、(1,0)、(2,0)...
而2维阵列的第一行矩阵则是matrix[0][1]、matrix[0][2]、matrix[0][3]...


<<:  Day 2:什麽是 SRE

>>:  未知的第二天 - Nuxt 的出现

[DAY 7] _GPIO口的八种模式

接续昨天说完暂存器的看法,再来讲一下GPIO口的八种模式,两大类分成输出跟输入细分有以下8种 1.开...

[Day 3]专案始动(後端篇)

到底该为一路顺畅没出Bug高兴还是遇到难题花时间克服狂喜,都几 第三天终於该来建立专案了,我是使用I...

Day 06 关键字的出价策略

公司若是出一系列潜在消费者会使用关键字後,放上 Google Ads 後,Google 是怎麽去花费...

Day27-好用的网页服务器-nginx(三)

前言 昨天的文章讲完前端 Nginx 的写法後,今天就要来进入後端的写法啦!在昨天的小结提到後端的写...

那些被忽略但很好用的 Web API / GetBoundingClientRect

小孩才做选择,成年人当然是尺寸、座标全都要! 昨天介绍的 ResizeObserver API 可...