day12 leetcode-hot100-19(矩阵2)
54. 螺旋矩阵 - 力扣(LeetCode)
1.模拟路径
思路:模拟旋转的路径
(1)设计上下左右方向控制器以及边界。比如zy=1向右,zy=-1向左;sx=1向上,sx=-1向下。上边界0,下边界hang-1,左边界=0,右边界=lie-1
(2)然后根据是否到达边界,来改变方向与边界。
具体代码
(1)为什么我一开始上边界为1,因为一开始就向右移动,说明以及来到过上边界一次了,所以优先进行收缩一个单位。
(2)为什么count=flag-1的时候还需要再加入一个元素,因为我这个循环代码设计的原因,每次都取不到当前方向的最后一个值,导致在最后一个元素永远取不到,所以就人为补充最后的元素。还是设计的不好。
class Solution {public List<Integer> spiralOrder(int[][] matrix) {List<Integer> ans = new ArrayList<>();int sx=0;int zy=1;int s_mar=1,x_mar=matrix.length-1,y_mar=matrix[0].length-1,z_mar=0;int flag=(x_mar+1)*(y_mar+1);int hang=0;int lie=0;int count=0;while(true){if(sx==1){while(hang>s_mar){ans.add(matrix[hang][lie]);hang--;count++;}sx=0;zy=1;s_mar++;if(count==flag-1){ans.add(matrix[hang][lie]);return ans;}}if(sx==-1){while(hang<x_mar){ans.add(matrix[hang][lie]);hang++;count++;}sx=0;zy=-1;x_mar--;if(count==flag-1){ans.add(matrix[hang][lie]);return ans;}} if(zy==1){while(lie<y_mar){ans.add(matrix[hang][lie]);lie++;count++;}y_mar--;zy=0;sx=-1;if(count==flag-1){ans.add(matrix[hang][lie]);return ans;}}if(zy==-1){while(lie>z_mar){ans.add(matrix[hang][lie]);lie--;count++;}z_mar++;zy=0;sx=1;if(count==flag-1){ans.add(matrix[hang][lie]);return ans;}}}}
}