路径模拟
时间:O(mn),mn为矩阵长宽
import java.util.ArrayList; public class Solution { public ArrayList<Integer> printMatrix(int [][] matrix) { ArrayList<Integer> ans = new ArrayList<Integer>(); if(matrix==null || matrix.length==0) return ans; //获取矩阵长宽 int calT = matrix.length; int rowT = matrix[0].length; //按照路径遍历 int count = 0; int cal = 0; int row = 0; int res = 0;//控制边距 boolean leftFlag = false; boolean rightFlag = true; boolean upFlag = false; boolean downFlag = false; while(count<calT*rowT){ ans.add(matrix[cal][row]); count++; //向右,向下,向左,向上 if(rightFlag==true){ if(row==rowT-res-1){ rightFlag = false; downFlag = true; if(cal<calT-res-1) cal++; }else{ row++; } }else if(downFlag==true){ if(cal==calT-res-1){ downFlag = false; leftFlag = true; if(row>res) row--; }else{ cal++; } }else if(leftFlag==true){ if(row==res){ leftFlag = false; upFlag = true; if(cal>res+1) cal--; }else{ row--; } }else if(upFlag==true){ if(cal==res+1){ upFlag = false; rightFlag = true; res++; if(row<calT-res-1) row++; }else{ cal--; } } } return ans; } }