力扣hot100之螺旋矩阵

python 复制代码
class Solution:
    def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
        # 用四个数对应4个遍历的方向[0, 1, 2, 3] - [右,下,左,上]
        go_state = 0 # 起始必须向右
        # record_matrix = [[0] * n for _ in range(m)]
        n_0, n_1, n_2, n_3 = 0, 0, 0, 0
        m, n = len(matrix), len(matrix[0])  
        go_num, limit_num = 0, len(matrix) * len(matrix[0])
        ans = []
        i, j = 0, 0
        while go_num < limit_num :
            ans.append(matrix[i][j])
            # record_matrix[i][j] = 1
            go_num += 1
            if go_state == 0:
                if j == n - 1 - n_1:
                    go_state = 1
                    i += 1
                    n_0 += 1
                else:
                    j += 1
            elif go_state == 1:
                if i == m - 1 - n_2:
                    go_state = 2                        
                    j -= 1
                    n_1 += 1
                else:
                    i += 1
            elif go_state == 2:
                if j == n_3:
                    go_state = 3                        
                    i -= 1
                    n_2 += 1
                else:
                    j -= 1
            else:
                if i == n_1:
                    go_state = 0                        
                    j += 1
                    n_3 += 1
                else:
                    i -= 1
        return ans
                       

个人解法:

1.用4个状态标记遍历的走向

2.当前状态的结束状态依赖于下一个状态的完全执行次数

3.用遍历的元素数量作为退出循环的临界

大佬们的解法:

这种解法和大佬的方法二思路一致,其方法一则将当前状态以及该状态下对当前坐标的动作融合起来了,可以参考:https://leetcode.cn/problems/spiral-matrix/solutions/2966229/liang-chong-fang-fa-jian-ji-gao-xiao-pyt-4wzk

相关推荐
HelloDam18 分钟前
基于元素小组的归并排序算法
后端·算法·排序算法
HelloDam18 分钟前
基于连贯性算法的多边形扫描线生成(适用于凸多边形和凹多边形)【原理+java实现】
算法
uhakadotcom1 小时前
Apache Airflow入门指南:数据管道的强大工具
算法·面试·github
跳跳糖炒酸奶2 小时前
第四章、Isaacsim在GUI中构建机器人(2):组装一个简单的机器人
人工智能·python·算法·ubuntu·机器人
绵绵细雨中的乡音2 小时前
动态规划-第六篇
算法·动态规划
程序员黄同学2 小时前
动态规划,如何应用动态规划解决实际问题?
算法·动态规划
march_birds2 小时前
FreeRTOS 与 RT-Thread 事件组对比分析
c语言·单片机·算法·系统架构
斯汤雷3 小时前
Matlab绘图案例,设置图片大小,坐标轴比例为黄金比
数据库·人工智能·算法·matlab·信息可视化
云 无 心 以 出 岫3 小时前
贪心算法QwQ
数据结构·c++·算法·贪心算法
俏布斯4 小时前
算法日常记录
java·算法·leetcode