这里在mian方法中一个,封装起来又写了一遍
m*n的矩阵
大概思路,开始每一圈的开始x都等于y 也就是(0,0)(1,1)........
每次一圈下来的结束,也就是(m-1,n-1)(m-2,n-2).......
这样就可以用4个for来分别控制从左向右,从上到下,从右到左,从下到上
并且加上一些特判,就能过了,这个题目就是麻烦在特判上了........
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int m=sc.nextInt();
int n=sc.nextInt();
int[][] arr=new int[m][n];
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
arr[i][j]=sc.nextInt();
}
}
int beginx=0;
int beginy=0;
int endx=m-1;
List<Integer> list=new ArrayList<>();
int endy=n-1;
if(endy==0){
for(int i=0;i<=endx;i++){
System.out.println(arr[i][0]);
}
return;
}
while(beginx<endx && beginy<endy){
for(int i=beginy;i<=endy;i++){
list.add(arr[beginx][i]);
}
for(int i=beginx+1;i<=endx;i++){
list.add(arr[i][endy]);
}
for(int i=endy-1;i>=beginy;i--){
list.add(arr[endx][i]);
}
for(int i=endx-1;i>beginx;i--){
list.add(arr[i][beginx]);
}
beginx++;beginy++;
endx--;endy--;
}
for(Integer one:list){
System.out.println(one+"");
}
if(beginx!=endx && beginy==endy){
for(int i=beginx;i<=endx;i++){
System.out.println(arr[i][beginy]);
}
}
if(beginx==endx && beginy!=endy){
for(int i=beginy;i<=endy;i++){
System.out.println(arr[beginx][i]);
}
}
if(beginx==endx && beginy==endy) System.out.println(arr[endx][endy]);
}
public ArrayList<Integer> printMatrix(int [][] matrix) {
int m=matrix.length;
int n=matrix[0].length;
ArrayList<Integer> list=new ArrayList<>();
int beginx=0;
int beginy=0;
int endx=m-1;
int endy=n-1;
if(endy==0){
for(int i=0;i<=endx;i++){
list.add(matrix[i][0]);
}
return list;
}
while(beginx<endx && beginy<endy){
for(int i=beginy;i<=endy;i++){
list.add(matrix[beginx][i]);
}
for(int i=beginx+1;i<=endx;i++){
list.add(matrix[i][endy]);
}
for(int i=endy-1;i>=beginy;i--){
list.add(matrix[endx][i]);
}
for(int i=endx-1;i>beginx;i--){
list.add(matrix[i][beginx]);
}
beginx++;beginy++;
endx--;endy--;
}
if(beginx!=endx && beginy==endy){
for(int i=beginx;i<=endx;i++){
list.add(matrix[i][beginy]);
}
}
if(beginx==endx && beginy!=endy){
for(int i=beginy;i<=endy;i++){
list.add(matrix[beginx][i]);
}
}
if(beginx==endx && beginy==endy) list.add(matrix[endx][endy]);
return list;
}
}