路径模拟
时间: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;
}
}
京公网安备 11010502036488号