1. 程式人生 > >java 輸入一個矩陣,按照從外向裡以順時針的順序依次打印出每一個數字,例如,如果輸入如下矩陣: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 則依次打印出數字1,2,

java 輸入一個矩陣,按照從外向裡以順時針的順序依次打印出每一個數字,例如,如果輸入如下矩陣: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 則依次打印出數字1,2,

題目描述

輸入一個矩陣,按照從外向裡以順時針的順序依次打印出每一個數字,例如,如果輸入如下矩陣: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 則依次打印出數字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> printMatrix(int [][] matrix) {
			
			ArrayList<Integer> list=new ArrayList<Integer>();
			read(matrix,list,0);
		       return list;
	    }
		public void read(int [][] matrix,ArrayList list,int start){
			int row=matrix.length;
			int col=matrix[0].length;
			if( matrix==null || col < 1 || row < 1 || start < 0 )   
		        return;  
		    if( col <= 2*start || row <= 2*start )   
		        return;  
		    int stopX = col - 1 - start;//一圈最右列在座標中的位置  
		    int stopY = row - 1 - start;//一圈最大行在座標中位置 
		  //列印此圈中的最上行  
		    for( int i=start; i<=stopX; i++)  
		        list.add(matrix[start][i]);  
		    //列印此圈中的最右列  
		    if(start <= stopX) //如果此圈中至少有一列  
		        for(int i=start+1; i<=stopY; i++)  
		        	list.add(matrix[i][stopX]);  
		    //列印次圈中的最下行  
		    if(start < stopX && start < stopY)  
		        for(int i=stopX-1; i >= start; i--)  
		        	list.add(matrix[stopY][i]);  
		    //列印次圈中的最左行  
		    if(start < stopX && start < stopY - 1)  
		        for(int i=stopY-1; i >= start+1; i--)  
		        	list.add(matrix[i][start]); 
		    read(matrix,list,start+1);
		}
		
		
}