leetcode 54.螺旋矩阵

思路:模拟。

根据题目要求模拟即可。

注意几点:首先需要判断下一个数能不能转向,还有需要判断什么时候旋转结束。

第一个问题可以用标志数组来标记已经遍历过的数组,同时我们在判断的时候一定是需要先判断一下下一个是否满足旋转条件,再去标记。

第二个问题可以用一个变量记录目前的遍历个数,一旦超过了数组的元素个数,那么就会停止。

复制代码
class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
        boolean [][]flag=new boolean[110][110];
        int x=-1,y=0;
        List<Integer>list=new ArrayList<Integer>();
        int cnt=0;
        while(cnt!=matrix.length*matrix[0].length){
        while(!flag[y][x+1]&&x!=matrix[0].length-1){
            x++;
            flag[y][x]=true;
            list.add(matrix[y][x]);
            cnt++;
        }
        while(!flag[y+1][x]&&y!=matrix.length-1){
            y++;
            flag[y][x]=true;
            list.add(matrix[y][x]);
            cnt++;
        }
        while(x>0&&!flag[y][x-1]){
            x--;
            flag[y][x]=true;
            list.add(matrix[y][x]);
            cnt++;
        }
        while(y>0&&!flag[y-1][x]){
            y--;
            flag[y][x]=true;
            list.add(matrix[y][x]);
            cnt++;
        }
        }
        return list;
    }
}
相关推荐
Liu628886 小时前
C++中的工厂模式高级应用
开发语言·c++·算法
AI科技星6 小时前
全尺度角速度统一:基于 v ≡ c 的纯推导与验证
c语言·开发语言·人工智能·opencv·算法·机器学习·数据挖掘
参.商.7 小时前
【Day41】143. 重排链表
leetcode·golang
条tiao条7 小时前
KMP 算法详解:告别暴力匹配,让字符串匹配 “永不回头”
开发语言·算法
干啥啥不行,秃头第一名7 小时前
C++20概念(Concepts)入门指南
开发语言·c++·算法
zzh940777 小时前
Gemini 3.1 Pro 硬核推理优化剖析:思维织锦、动态计算与国内实测
算法
2301_807367198 小时前
C++中的解释器模式变体
开发语言·c++·算法
愣头不青8 小时前
617.合并二叉树
java·算法
MIUMIUKK8 小时前
双指针三大例题
算法
灵感__idea9 小时前
Hello 算法:复杂问题的应对策略
前端·javascript·算法