给你一个
m
行n
列的矩阵matrix
,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素
一看到这个大家有没有想到
就是一个螺旋形状,那这道题我们应该怎么解决?
我们先来仔细的看,它这种螺旋形状的遍历是先【右-下-左-上】,所以我们可以先设置4个变量,去控制我们所需要遍历形状的边界
int m=matrix.length;int n=matrix[0].length;//上下左右进行遍历int up=0;int down=m-1;int left=0;int right=n-1;
那么循环结束的条件的是什么呢?
我们是要将目标数组中的元素按照螺旋的规则加入一个list集合中,那么循环的条件是不是就是我们集合list中的元素小于目标数组中的元素时就可以执行遍历,上文易得数组中每一个小数组的长度为n,数组中的有m个小数组,数组中的元素我们是不是可以用数组的个数*每个数组的长度
while(list.size()<m*n){}
先进行上层的从左向右遍历:
//将上层的元素从左往右开始遍历//遍历的条件是最上层不能大于最下层if(up<=down){//从左向右for(int i=left;i<=right;i++){list.add(matrix[up][i]);}//上边界下移up++;}
再从最后一列从上往下遍历
//将最后一列的元素从上往下开始遍历if(left<=right){//从上到下for(int i=up;i<=down;i++){list.add(matrix[i][right]);}//往左移一列right--;}
最后一层从右往左遍历
//将最后一行从右往左遍历if(up<=down){for(int i=right;i>=left;i--){list.add(matrix[down][i]);}down--;}
第一列从下自上遍历
//将第一列进行从小往上进行遍历if(left<=right){for(int i=down;i>=up;i--){list.add(matrix[i][left]);}left++;}