剑指offer-顺时针打印矩阵

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

思路:深搜+标记

ac代码:

 1 import java.util.ArrayList;
 2 public class Solution {
 3     ArrayList<Integer>list=new ArrayList<Integer>();
 4     public ArrayList<Integer> printMatrix(int [][] matrix) {
 5         boolean flag[][]=new boolean[matrix.length][matrix[0].length];
 6         list.clear();
 7         dfs(matrix,flag,0,0,1,1);
 8         return list;
 9     }
10      
11      void  dfs(int [][]s,boolean flag[][],int i,int j,int t,int n){
12         if(n>s[0].length*s.length)
13                 return ;
14             if(t==1){
15                if(i>=0&&i<s.length&&j>=0&&j<s[0].length&&flag[i][j]==false){
16                    list.add(s[i][j]);
17                    System.out.println("向右"+s[i][j]);
18                    flag[i][j]=true;
19                    n++;
20                    dfs(s,flag,i,j+1,t,n);
21                }else{
22                    //向下
23                    dfs(s,flag,i+1,j-1,2,n);
24                }
25             }
26             if(t==2){
27                 if(i>=0&&i<s.length&&j>=0&&j<s[0].length&&flag[i][j]==false){
28                        list.add(s[i][j]);
29                        System.out.println("向下"+s[i][j]);
30                        flag[i][j]=true;
31                        n++;
32                        dfs(s,flag,i+1,j,t,n);
33                    }else{
34                        //向左
35                        dfs(s,flag,i-1,j-1,3,n);
36                    }
37                 
38             }
39             if(t==3){
40                 if(i>=0&&i<s.length&&j>=0&&j<s[0].length&&flag[i][j]==false){
41                        list.add(s[i][j]);
42                        System.out.println("向左"+s[i][j]);
43                        flag[i][j]=true;
44                        n++;
45                        dfs(s,flag,i,j-1,t,n);
46                    }else{
47                        //向上
48                        dfs(s,flag,i-1,j+1,4,n);
49                    }
50                 
51             }
52             if(t==4){
53                 if(i>=0&&i<s.length&&j>=0&&j<s[0].length&&flag[i][j]==false){
54                        list.add(s[i][j]);
55                        System.out.println("向上"+s[i][j]);
56                        flag[i][j]=true;
57                        n++;
58                        dfs(s,flag,i-1,j,t,n);
59                    }else{
60                        //向右
61                        dfs(s,flag,i+1,j+1,1,n);
62                    }
63                 
64             }
65     }
66 }
原文地址:https://www.cnblogs.com/llsq/p/8796345.html