算法:螺旋矩阵

问题

  • 给你一个 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;
    }
}
posted @   new_monkey  阅读(61)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示