给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。
输入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] 输出: [1,2,3,6,9,8,7,4,5]
package com.csu.marden;
import java.util.ArrayList;
import java.util.List;
public class Demo2 {
public static void main(String[] args) {
int [][] arr={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
show(diy_print(arr));
}
public static void show(List list){
for(int i=0;i<list.size();i++){
System.out.print(list.get(i)+" ");
}
}
public static List diy_print(int [] [] arr){
ArrayList<Integer> list=new ArrayList<>();
if(arr==null || arr.length==0 || arr[0].length==0){
return list;
}
//定义方向
int [] dx={0,1,0,-1};
int [] dy={1,0,-1,0};
//定义方向索引
int d=0;
int n=arr.length;
int m=arr[0].length;
int x=0;
int y=0;
boolean [][] visited=new boolean[n][m];
while(list.size()<n*m){
list.add(arr[x][y]);
visited[x][y]=true;
//寻找下一个位置的坐标
int nx=x+dx[d];
int ny=y+dy[d];
if(nx<m && nx>=0 && ny<n && ny>=0 && !visited[nx][ny]){
x=nx;
y=ny;
continue;
}else{
d=(d+1)%4;
nx=x+dx[d];
ny=y+dy[d];
x=nx;
y=ny;
}
}
return list;
}
}