顺时针输出矩阵数据
顺时针打印矩阵
http://www.nowcoder.com/questionTerminal/9b4c81a02cd34f76be2659fa0d54342a
螺旋遍历,有四个方向,每个方向坐标的变化是不同的。x或y的加一减一。
遇到边界或者遍历过的位置,要变方向。
import java.util.ArrayList; public class Solution { public ArrayList<Integer> printMatrix(int [][] matrix) { int curDirect = 0; int curX = 0; int curY = 0; int h = matrix.length; int w = matrix[0].length; int[][] flag = new int[h][w]; for(int i=0;i<h;i++){ for(int j=0;j<w;j++){ flag[i][j] = 0; } } ArrayList<Integer> arr = new ArrayList<>(); for(int i=0;i<h*w;i++){ arr.add(matrix[curX][curY]); flag[curX][curY] = 1; if(curDirect==0){ if(curY+1>=w||flag[curX][curY+1]==1){ curX+=1; curDirect = 1; }else { curY+=1; } }else if(curDirect==1){ if(curX+1>=h||flag[curX+1][curY]==1){ curY-=1; curDirect = 2; }else { curX+=1; } }else if(curDirect==2){ if(curY-1<0||flag[curX][curY-1]==1){ curX-=1; curDirect = 3; }else { curY-=1; } }else if(curDirect==3){ if(curX-1<0||flag[curX-1][curY]==1){ curY+=1; curDirect = 0; }else { curX-=1; } } } return arr; } }