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;
    }
}
相关推荐
网易独家音乐人Mike Zhou2 小时前
【卡尔曼滤波】数据预测Prediction观测器的理论推导及应用 C语言、Python实现(Kalman Filter)
c语言·python·单片机·物联网·算法·嵌入式·iot
Guofu_Liao3 小时前
大语言模型---LoRA简介;LoRA的优势;LoRA训练步骤;总结
人工智能·语言模型·自然语言处理·矩阵·llama
Swift社区5 小时前
LeetCode - #139 单词拆分
算法·leetcode·职场和发展
Kent_J_Truman6 小时前
greater<>() 、less<>()及运算符 < 重载在排序和堆中的使用
算法
IT 青年6 小时前
数据结构 (1)基本概念和术语
数据结构·算法
Dong雨7 小时前
力扣hot100-->栈/单调栈
算法·leetcode·职场和发展
SoraLuna7 小时前
「Mac玩转仓颉内测版24」基础篇4 - 浮点类型详解
开发语言·算法·macos·cangjie
liujjjiyun7 小时前
小R的随机播放顺序
数据结构·c++·算法
¥ 多多¥7 小时前
c++中mystring运算符重载
开发语言·c++·算法
trueEve8 小时前
SQL,力扣题目1369,获取最近第二次的活动
算法·leetcode·职场和发展