剑指offer 19 顺时针打印矩阵

来源:互联网 发布:大数据如何影响制造业 编辑:程序博客网 时间:2024/06/06 03:01

题目描述

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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;    }}


0 0
原创粉丝点击