首页 > 其他分享 >LeetCode54.螺旋数组

LeetCode54.螺旋数组

时间:2023-09-26 10:25:48浏览次数:37  
标签:LeetCode54 matrix 螺旋 int turn flag 数组 ans --

本题关键在于模拟数组螺旋的步骤,使用 flag 二维数组标识矩阵某位置是否被访问过,使用 turn 变量指示当前寻找的方向, turn 为0时,代表向右查找, turn 为1时,代表向下查找, turn 为2时,代表向左查找, turn 为3时,代表向上查找,具体的代码如下:

class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
        int turn = 0;
        int n = matrix.length;
        int m = matrix[0].length;
        int i = 0;
        int j = 0;
        int[][] flag = new int[n][m];
        List<Integer> ans = new ArrayList<>();
        while(ans.size() != m*n){
            if(turn == 0){
                ans.add(matrix[i][j]);
                flag[i][j]=1;
                j++;
                if(j>m-1 || flag[i][j]==1){
                    turn = (turn+1)%4;
                    j--;
                    i++;
                    continue;
                }
            }
            if(turn == 1){
                ans.add(matrix[i][j]);
                flag[i][j]=1;
                i++;
                if(i>n-1 || flag[i][j]==1){
                    turn = (turn+1)%4;
                    i--;
                    j--;
                    continue;
                }
            }
            if(turn == 2){
                ans.add(matrix[i][j]);
                flag[i][j]=1;
                j--;
                if(j<0 || flag[i][j]==1){
                    turn = (turn+1)%4;
                    j++;
                    i--;
                    continue;
                }
            }
            if(turn == 3){
                ans.add(matrix[i][j]);
                flag[i][j]=1;
                i--;
                if(i<0 || flag[i][j]==1){
                    turn = (turn+1)%4;
                    i++;
                    j++;
                    continue;
                }
            }
        }
        return ans;
    }
}

 

标签:LeetCode54,matrix,螺旋,int,turn,flag,数组,ans,--
From: https://www.cnblogs.com/rockdow/p/17729508.html

相关文章

  • 随想录Day5|242. 有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和
    随想录Day5|242.有效的字母异位词、349.两个数组的交集、202.快乐数、1.两数之和 242.有效的字母异位词文章&视频讲解给定两个字符串s和t,编写一个函数来判断t是否是s的字母异位词。注意:若s和t中每个字符出现的次数都相同,则称s和t互为字母异位词。1......
  • 队列环形数组实现两种实现
      1importjava.util.Iterator;//环形队列,数组容量应该比实际需要大一publicclassMain{publicstaticvoidmain(String[]args){ArrayQueue<Integer>a=newArrayQueue<>(10);a.push(1);a.push(2);a.push(3);a.push(4)......
  • 如何实现一个数组按照另外一个数组的顺序进行排序?
    数组arr1按照arr2的顺序展示,如何实现:一、简单类型数组letarr1=[1,2,3,4,5] letarr2=[5,3,2,4,1]arr1.sort((prev,next)=>{ returnarr2.indexOf(prev)-arr2.indexOf(next)})console.log(arr1)//[5,3,2,4,1]二、复杂类型数组letarr1=[{......
  • (转)图的存储结构|邻接矩阵、邻接表、十字链表、邻接多重表、边集数组
    原文:https://juejin.cn/post/6996132859001962504?searchId=20230925172238C35D1579B2CBC3D2F78A7.4图的存储结构图的存储结构相较线性表与树来说就更加复杂了。首先,我们口头上说的“顶点的位置”或“邻接点的位置”只是一个相对的概念。其实从图的逻辑结构定义来看,图上任何......
  • 【C++】动态内存管理 ⑤ ( 基础数据类型数组 内存分析 | 类对象 内存分析 | malloc 分
    文章目录一、基础数据类型数组内存分析1、malloc分配内存delete释放内存2、new分配内存free释放内存二、类对象内存分析1、malloc分配内存delete释放内存2、new分配内存free释放内存博客总结:C语言中使用malloc分配的内存,使用free进行释放;C++语言中......
  • Java -【字符串,数组,哈希表】常用操作
    一.字符串创建字符串:可以使用双引号或者String类的构造方法创建字符串。Stringstr1="HelloWorld";Stringstr2=newString("HelloWorld");连接字符串:可以使用加号或者String类的concat()方法连接字符串。Stringstr3=str1+str2;Stringstr4=str1.concat(str2);......
  • Go - 【字符串,数组,哈希表】常用操作
    一.字符串字符串长度:s:="hello"l:=len(s)fmt.Println(l)//输出5遍历字符串:s:="hello"fori,c:=ranges{fmt.Printf("%d:%c",i,c)}//输出:0:h1:e2:l3:l4:ofori:=0;i<len(s);i++{ fmt.Printf("%s",s[......
  • Java -【字符串,数组,哈希表】常用操作
    一.字符串创建字符串:可以使用双引号或者String类的构造方法创建字符串。Stringstr1="HelloWorld";Stringstr2=newString("HelloWorld");连接字符串:可以使用加号或者String类的concat()方法连接字符串。Stringstr3=str1+str2;Stringstr4=str1.concat(str2);获......
  • LeetCode 918. 环形子数组的最大和
    环形子数组的最大和(medium)题目链接:918.环形子数组的最大和题目描述:给定一个长度为n的环形整数数组nums,返回nums的非空子数组的最大可能和。环形数组意味着数组的末端将会与开头相连呈环状。形式上,nums[i]的下一个元素是nums[(i+1)%n],nums[i]的前一个元素......
  • LeetCode 53. 最大子数组和
    最大子数组和(medium)题目链接:53.最大子数组和题目描述:给你一个整数数组nums,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组是数组中的一个连续部分。示例1:输入:nums=[-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组[4,-1,2,1]的和最大......