步骤:用四个变量(up ,down,left,right)模拟数组的边界,
1.输出最上的一行,再up++。再判断up是否>down,若是,则break。
2输出最右的一行,再right--。再判断left是否>right,若是,则break。
3.输出最下的一行,再down--;再判断up是否>down,若是,则break。
4.输出最左的一行,再left++。再判断left是否>right,若是,则break。
重复1,2,3,4
代码:
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printMatrix(int [][] arr) {
ArrayList<Integer> list=new ArrayList<>();
if(arr==null||arr.length==0||arr[0].length==0){
return list;
}
int up=0;
int down=arr.length-1;
int left=0;
int right=arr[0].length-1;
while(true){
//右走
for(int i=left;i<=right;i++){
list.add(arr[up][i]);
}
up++;
if(up>down){
break;
}
//下走
for(int i=up;i<=down;i++){
list.add(arr[i][right]);
}
right--;
if(left>right){
break;
}
//左走
for(int i=right;i>=left;i--){
list.add(arr[down][i]);
}
down--;
if(up>down){
break;
}
//上走
for(int i=down;i>=up;i--){
list.add(arr[i][left]);
}
left++;
if(left>right){
break;
}
}
return list;
}
}