顺时针输出矩阵

这里在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;
    }
	
}

猜你喜欢

转载自blog.csdn.net/qq_39512671/article/details/82891094