将已经走过的地方置0,然后拐弯的时候判断一下是不是已经走过了,
如果走过了就计算一下新的方向
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> result = new ArrayList<>();
int i=0,j=0,di=0,dj=1;//最初是横坐标不变 纵坐标变化
while(result.size()!=matrix.length*matrix[0].length){
result.add(matrix[i][j]);
matrix[i][j]=0;
if(matrix[(i+di+matrix.length)%matrix.length]
[(j+dj+matrix[0].length)%matrix[0].length]==0){
int temp=di;
di=dj;
dj=-temp; //整个if语句是问题的关键,
//这三行是转换方向;在if判断里要多加一个matrix.length 是为了防止数组坐标从
//0→-1 产生越界,这个地方搞了我挺久,这里取余的方法也很巧妙,学习!
}
i+=di;
j+=dj;
}
return result;
}
}