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