每日算法题 21---54.螺旋矩阵
题目54.螺旋矩阵要求给你一个m行n列的矩阵matrix请按照顺时针螺旋顺序返回矩阵中的所有元素。示例思路核心思路是用边界圈定遍历范围按照固定方向循环遍历每遍历完一条边就收缩对应边界直到边界交叉终止详细过程1.初始化边界定义四个边界变量圈定当前需要遍历的矩阵范围up上边界初始为第一行down下边界初始为最后一行left左边界初始为第一列right右边界初始为最后一列2.按照右-下-左-上的固定方向循环遍历从左到右遍历上边界遍历完成后上边界向下收缩一行up若上边界超过下边界终止循环从上到下遍历右边界遍历完成后右边界向左收缩一列--right若右边界超过左边界终止循环从右到左遍历下边界遍历完成后下边界向上收缩一行--down若下边界超过上边界终止循环从下到上遍历左边界遍历完成后左边界向右收缩一列left若左边界超过右边界终止循环。3.终止条件任意一对边界交叉或重合说明矩阵已全部遍历跳出循环返回结果代码class Solution { public ListInteger spiralOrder(int[][] matrix) { ListInteger ansnew ArrayList(); if(matrixnull || matrix.length0) return ans; int mmatrix.length; int nmatrix[0].length; int up0,downm-1; int left0,rightn-1; while(true){ for(int ileft;iright;i){ ans.add(matrix[up][i]); } if(up down) break; for(int iup;idown;i){ ans.add(matrix[i][right]); } if(--rightleft) break; for(int iright;ileft;i--){ ans.add(matrix[down][i]); } if(--downup) break; for(int idown;iup;i--){ ans.add(matrix[i][left]); } if(leftright) break; } return ans; } }
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2471178.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!