首页 > 编程语言 >算法:螺旋矩阵

算法:螺旋矩阵

时间:2022-08-15 22:44:41浏览次数:39  
标签:matrix arow int brow 螺旋 矩阵 算法 acol

问题

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

解决

//采用宏观调度的方式
    //可以看作n层进行操作,每层从左上角、右下角的a、b两点遍历

class Solution {
    List<Integer> list=new ArrayList<Integer>();
    public List<Integer> spiralOrder(int[][] matrix) {
        int row=matrix.length;                //每行的长度
        int col=matrix[0].length;             //每列的长度

        int arow=0,acol=0,brow=row-1,bcol=col-1;
        while (arow <= brow && acol <= bcol) {
		reAllOrder(matrix, arow++, acol++, brow--, bcol--);
		}
        return list; 

    }
    public List<Integer> reAllOrder(int[][] matrix,int arow,int acol,int brow,int bcol){    //操作二维数组 、a的行和列、b的行和列
        if(arow==brow){                    //ab同行:从左至右依次输出
            for(int i=acol;i<=bcol;i++){
            list.add(matrix[arow][i]);
            }
        }
        else if(acol==bcol){               //ab同列:上到下依次输出
            for(int j=arow;j<=brow;j++){
            list.add(matrix[j][arow]);
            }
        }else{                            //ab不同行、不同列:按序从左到右、从上到下依次输出
            int curC = acol;
			int curR = arow;
			while (curC != bcol) {      //上边
				 list.add(matrix[arow][curC]);
				curC++;
			}
			while (curR != brow) {      //右边
				 list.add(matrix[curR][bcol]);
				curR++;
			}
			while (curC != acol) {      //下边
				list.add(matrix[brow][curC]);
				curC--;
			}
			while (curR != arow) {      //左边
				 list.add(matrix[curR][acol]);
				curR--;
			}
           }
           return list;
    }
}

标签:matrix,arow,int,brow,螺旋,矩阵,算法,acol
From: https://www.cnblogs.com/zhangsanM/p/16589942.html

相关文章

  • 排序算法-冒泡、选择、堆、插入、归并、快速、希尔
    排序算法,默认是升序,左边的值是属于“小”值理解比较大小后的交换:当前元素cur和左边的元素cur-1,左边的比较大,就交换或者挪动array[cur]=array[cur-1];编码的区......
  • 算法: 超级洗衣机
    问题假设有n 台超级洗衣机放在同一排上。开始的时候,每台洗衣机内可能有一定量的衣服,也可能是空的。在每一步操作中,你可以选择任意m(1<=m<=n)台洗衣机,与此同时......
  • 十大排序算法之【堆排序】
    堆排序代码://头文件省略voidheapify(vector<int>&in,intbottom,inttop){intlargest=top;intlson=top*2+1;intrson=top*2+1;if(lson......
  • Albert理论详解:用矩阵分解与跨层参数共享减少参数量
    1.介绍Albert是Bert的一个变种,它在Bert的基础上减少了参数量,使整个模型更加的“轻量化”,同时也保持了Bert的性能,但值得注意的是,Albert虽然显著地减少了参数量,但并没有显著......
  • 经典算法之快排
    快排的复杂度快排逻辑快速排序算法通过多次比较和交换来实现排序,其排序流程如下:首先设定一个分界值(基准值),通过该分界值将数组分成左右两部分。将大于或等于分界值......
  • SHA256加密算法
    https://www.cnblogs.com/zhangwuxuan/p/12863273.html算法介绍:比特币挖矿的御用算法SHA256是SHA-2下细分出的一种算法SHA-2,名称来自于安全散列算法2(英语:SecureHashA......
  • 一文带你弄懂 JVM 三色标记算法!
    大家好,我是树哥。最近和一个朋友聊天,他问了我JVM的三色标记算法。我脑袋一愣发现竟然完全不知道!于是我带着疑问去网上看了几天的资料,终于搞清楚啥事三色标记算法,它是用......
  • C++ 特殊矩阵的压缩存储算法
    1.前言什么是特殊矩阵?C++,一般使用二维数组存储矩阵数据。在实际存储时,会发现矩阵中有许多值相同的数据或有许多零数据,且分布呈现出一定的规律,称这类型的矩阵为特殊矩阵......
  • NC16645 [NOIP2007]矩阵取数游戏
    题目链接题目题目描述帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数。游戏规则如下:1.每次取数时须从每行各取走一个元素,......
  • 算法学习之路 离散化
    //离散化值得就是一一对应的关系,通常处理大数据范围中的小范围数据;离散化的中的两个步骤:1.a[]中可能的重复元素(去重)2.如何算出x离散化之后的值(二分)/*离散化模板......