剑指offer 19 顺时针打印矩阵

题目描述

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值