题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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.
思路
可以用dfs中的四个方位来思考,首先是向右走{0,1},然后是向下走{1,0},然后是向左走{0,-1},最后是向上走{-1,0}。
不过要注意的是只能是上一次走的方向走不通了,才能换下一个方向而已。
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printMatrix(int [][] matrix) {
if(matrix==null)return null;
int s[][]={{0,1},{1,0},{0,-1},{-1,0}};
int ss[][]=new int[1000][1000];
ArrayList temp_Array=new ArrayList<Integer>();
int size_l=matrix.length;
int size_r=matrix[0].length;
int temp_xx=0;
int temp_yy=0;
int final_xx=0;
int final_yy=0;
for(int ii=0;ii<size_l;ii++){
for(int jj=0;jj<size_r;jj++)
{
ss[ii][jj]=0;
}
}
ss[0][0]=1;
int direction=0;
temp_Array.add(new Integer(matrix[0][0]));
while(true){
int mark=direction;
while(true){
direction%=4;
temp_xx=s[direction][0]+final_xx;
temp_yy=s[direction][1]+final_yy;
if((temp_xx>=size_l)||(temp_xx<0)||(temp_yy>=size_r)||(temp_yy<0)||(ss[temp_xx][temp_yy]==1)){
direction++;
//mark++;
if(mark==direction%4){mark=-1;break;}
}
else break;
//break;
}
if(mark==-1)break;
final_xx=temp_xx;
final_yy=temp_yy;
ss[final_xx][final_yy]=1;
temp_Array.add(new Integer(matrix[final_xx][final_yy]));
}
return temp_Array;
}
}