题目描述
顺时针打印矩阵
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
思路:
顺时针打印数组,的关键在于 每转一圈 我们的边界会缩小。
java实现:
import java.util.ArrayList;
public class Solution {
ArrayList<Integer> printMatrix(int [][] matrix) {
ArrayList<Integer> ret = new ArrayList<>();
int x=0 ; int y=0;
int cnt= matrix[0].length *matrix.length; //数组总数
int rEdge=matrix[0].length-1,dEdge=matrix.length-1,lEdge=0,uEdge=0;
//bool first=true;
for(x=0,y=0;cnt>0;cnt--){
ret.add(matrix[x][y]);
//;2
//go right
if(x==uEdge){if(y<rEdge)y++;
else if(y==rEdge){x++;}
continue;}
//down
if(y==rEdge){if(x<dEdge)x++;
else if(x==dEdge){y--;}
continue;}
//left
if(x==dEdge){if(y>lEdge)y--;
else if(y==lEdge){x--;}
continue;}
//up
if(y==lEdge){if(x>uEdge+1)x--;
else if( x==uEdge+1){y++;lEdge++;uEdge++;rEdge--;dEdge--;}
continue;}
//;3
}
return ret;
}
}