当前位置: 首页 > 后端技术 > Java

LeetCode-054-SpiralMatrix

时间:2023-04-01 13:52:31 Java

SpiralMatrix题目描述:给定一个m行n列的matrix矩阵,请按顺时针螺旋顺序返回矩阵中的所有元素。例子见LeetCode官网。来源:LeetCode链接:https://leetcode-cn.com/probl...版权归LeetCode所有。商业转载请联系官方授权,非商业转载请注明出处。方案一:数组遍历首先用row和column分别记录矩阵的行数和列数,count为矩阵中元素的个数,初始化一个与矩阵编号相同的二维数组来标记是否对应位置的数已经遍历完毕,初始化result记录结果的顺序,x和y记录当前位置的索引位置,然后按照右下左下的顺序开始处理二维数组right:right:y向右移动一位,判断是否超出列的限制,移动的位置是否还没有遍历。如果满足条件,则将移动位置的值放入结果中,并将count减一,并将该位置的标记位置置为true,直到向右移动,直到不移动为止;down:将x向下移动一位,判断是否超出行的限制,移动的位置是否还没有遍历,如果满足条件,将移动位置的值放入result中,count减1,并将该位置的标记位置设置为true,直到不能向下移动为止;向左:将y向左移动一位,判断是否不小于0,移动的位置是否没有遍历,如果满足则将移动位置的值放入结果中,并且将计数减一,并将该位置的标记位置设置为真,直到它向左移动;up:向左移动一位,判断是否不小于0,移动的位置是否没有遍历过。如果满足条件,则将移动位置的值放入结果中,并将计数减一,并将该位置的标记位置设置为true,直到不能再移动为止。重复上述过程,直到count为0,即所有的数都遍历到最后,返回结果。importjava.util.ArrayList;importjava.util.List;publicclassLeetCode_054{publicstaticListspiralOrder(int[][]matrix){introw=matrix.length,column=matrix[0].length,计数=行*列,x=0,y=-1;布尔[][]标志=新布尔[行][列];列表<整数>结果=新的ArrayList<>();while(count>0){//向右while(y+1=0&&!flag[x][y-1]){y=y-1;结果.add(矩阵[x][y]);标志[x][y]=真;数数-;}//upwhile(x-1>=0&&!flag[x-1][y]){x=x-1;结果.add(矩阵[x][y]);标志[x][y]=真;数数-;}}返回结果;}publicstaticvoidmain(String[]args){int[][]matrix=newint[][]{{1,2,3,4},{5,6,7,8},{9,10,11,12}};for(Integerinteger:spiralOrder(matrix)){System.out.print(integer+"");}}}【每日留言】愿你今天温柔优秀可爱果断一尘不染