首页 > 编程语言 >算法刷题记录-螺旋矩阵

算法刷题记录-螺旋矩阵

时间:2023-11-06 20:24:59浏览次数:44  
标签:matrix int 矩阵 flag 算法 赋值 true 刷题

算法刷题记录-螺旋矩阵

螺旋矩阵

给你一个正整数 n ,生成一个包含 1n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix

示例 1:

img

输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]

示例 2:

输入:n = 1
输出:[[1]]

思路,这题有点绕,我用了一个比res大2的布尔矩阵来存储被赋值的情况,赋值的逻辑是这样,可以往右赋值就往右赋值,否则就往下赋值,否则就往上赋值,否则就往上赋值,需要注意的是右的优先级其实是小于上的,比如多4*4的矩阵

1 2 3 4
5
11 6
10 9 8 7

在赋值完11后,此时既可以往右也可以往上,但正确来说应该是往上的,因此往右的逻辑是不能往上,代码如下:

public int[][] generateMatrix(int n) {
    int[][] res=new int[n][n];
    boolean[][] flag=new boolean[n+2][n+2];
    int row=0,col=0;
    int i=0;
    for (int j = 0; j < n+2; j++) {
        flag[j][0]=true;
        flag[0][j]=true;
        flag[j][n+1]=true;
        flag[n+1][j]=true;
    }
    while (i<n*n) {
        res[row][col] = i + 1;
        flag[row + 1][col + 1] = true;
        i++;
        if (!flag[row + 1][col + 2] & flag[row][col + 1]) {
            col++;
        } else if (!flag[row + 2][col + 1]) {
            row++;
        } else if (!flag[row + 1][col]) {
            col--;
        } else if (!flag[row][col + 1]) {
            row--;
        }
    }

    return res;
}

螺旋矩阵二

给你一个 mn 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。

示例 1:

img

输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]

示例 2:

img

输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]

思路:与上一题一模一样的做法,只不过矩阵的大小不一定是n*n的。

public List<Integer> spiralOrder(int[][] matrix) {
    ArrayList<Integer> res=new ArrayList<Integer>();
    int m=matrix.length;
    int n=matrix[0].length;
    boolean[][] flag=new boolean[m+2][n+2];
    for (int i = 0; i < n+2; i++) {
        flag[0][i]=true;
        flag[m+1][i]=true;
    }
    for (int i = 0; i < m+2; i++) {
        flag[i][0]=true;
        flag[i][n+1]=true;
    }
    int row=0,col=0;
    int i=0;
    while (i<m*n) {
        res.add(matrix[row][col]);
        flag[row + 1][col + 1] = true;
        i++;
        if (!flag[row + 1][col + 2] & flag[row][col + 1]) {
            col++;
        } else if (!flag[row + 2][col + 1]) {
            row++;
        } else if (!flag[row + 1][col]) {
            col--;
        } else if (!flag[row][col + 1]) {
            row--;
        }
    }
    return res;
}

标签:matrix,int,矩阵,flag,算法,赋值,true,刷题
From: https://www.cnblogs.com/hfutxcj/p/17813626.html

相关文章

  • 算法--笔记--单调栈
    单调栈是为了解决两层foru循环O(n^2)变为O(n)的问题思路是:维持一个单调栈.依次进入单调栈,并淘汰对后续没有帮助的对象当一个对象从栈里弹出的时候,结算当前对象参与的答案。如何判断单调栈是大压小还是小压大呢?左侧的要小的,就是大压小左侧的要大的,就是小压大......
  • 文心一言 VS 讯飞星火 VS chatgpt (129)-- 算法导论11.1 4题
    四、用go语言,我们希望在一个非常大的数组上,通过利用直接寻址的方式来实现一个字典。开始时该数组中可能包含一些无用信息,但要对整个数组进行初始化是不太实际的,因为该数组的规模太大。请给出在大数组上实现直接寻址字典的方案。每个存储对象占用O(1)空间;SEARCH、INSERT和DELETE操......
  • 文心一言 VS 讯飞星火 VS chatgpt (129)-- 算法导论11.1 4题
    四、用go语言,我们希望在一个非常大的数组上,通过利用直接寻址的方式来实现一个字典。开始时该数组中可能包含一些无用信息,但要对整个数组进行初始化是不太实际的,因为该数组的规模太大。请给出在大数组上实现直接寻址字典的方案。每个存储对象占用O(1)空间;SEARCH、INSERT和DELETE操......
  • 羚通视频智能分析平台石油石化 视频监控识别漏油算法检测
    羚通视频智能分析平台是一款专为石油石化行业设计的高效工具,它能够通过先进的算法进行漏油检测。这款平台利用了人工智能和大数据技术,可以实时监控石油石化设施的运行状态,及时发现并预警可能的漏油风险。在石油石化行业中,漏油是一种常见的安全隐患,如果不及时处理,可能会对环境造成严......
  • 大二算法实验一用循环链表解决约瑟夫环
    题目约瑟夫(Joeph)问题的一种描述是:编号为1,2,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的......
  • 数据结构与算法-数组
    什么是数组在每一种编程语言中,基本都会有数组这种数据类型。不过,它不仅仅是一种编程语言中的数据类型,还是一种最基础的数据结构是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据数组的特点低效的插入和删除数组为了保持内存数据的连续性,会导致插入......
  • 羚通视频智能分析平台玩手机、打电话算法检测识别系统 玩手机、打电话行为预警系统
    羚通视频智能分析平台是一款先进的技术工具,具备强大的算法检测和识别功能。该平台主要用于准确检测和识别用户是否在使用手机或打电话。首先,该平台具备强大的算法检测功能,能通过分析视频中的图像和声音数据,准确判断用户是否在使用手机。无论是滑动屏幕、点击按钮还是......
  • 【欧拉图】Euler Graph(Fluery算法,Hierholzer算法)
    还在持续更新ing前言此乃小Oler的一篇算法随笔,从今日后,还会进行详细的修订。注明:有参考自论文《欧拉图相关的生成与计数问题探究》简单介绍著名的哥尼斯堡七桥问题是18世纪著名的古典数学问题之一,该问题在相当长的时间里无人能解。欧拉经过研究,于1736年发表了论文《哥尼......
  • 算法实验报告2
    算法实验报告2本文链接:https://type.dayiyi.top/index.php/archives/231/1.求幂集问题也就是求全部的组合DFS:把全排列DFS树给记录下来就可以DFS到每个节点的时候,记录当前状态加入到结果集即可。复杂度O(N!)python代码:defdfs(nums,path,index,res):res.append(p......
  • Dijkstra, RIP, OSPF:OSPF算法
    RoutingInformationProtocol(RIP):Adistancevectorprotocolthatuseshopcountasitsmetrictodeterminethebestpathforroutingpackets.OpenShortestPathFirst(OSPF):Alinkstateprotocolthatcalculatesroutesbasedontheshortestpathalgor......