N19_顺时针打印指针

题目描述
* 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,
* 例如,如果输入如下4 X 4矩阵:
* 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,

此题: 在牛客上 不能直接打印 需要将每一个数字添加到链表中 再由主函数直接调用链表实现。

package new_offer;

import java.util.ArrayList;

public class N19_1_PrintMatrix {

    public ArrayList<Integer> printMatrix(int [][]matrix){
    	ArrayList re=new ArrayList();
    	int cols,rows;
    	rows=matrix.length;
    	cols=matrix[0].length;
    	int start=0;
    	//圈数  
    	while(cols>start*2&&rows>start*2) {
    		//打印部分 分四步
    		{
    			int endx=cols-1-start;
    			int endy=rows-1-start;
    			//1 从左至右进行打印 至少有一行
    			for(int i=start;i<=endx;i++) {
    				int n=matrix[start][i];
    				re.add(n);
    				System.out.print(n);
    				System.out.print(" ");
    			}
    			//2 从上至下进行打印 至少有两列
    			if(start<endy) {
    				for(int i=start+1;i<=endy;i++) {
    					int n=matrix[i][endx];
    					re.add(n);
        				System.out.print(n);
        				System.out.print(" ");
    				}
    			}
    			//3 从右至左进行打印 至少有两行两列
    			if(start<endy&&start<endx) {
    				for(int i=endx-1;i>=start;i--) {
    					int n=matrix[endy][i];
    					re.add(n);
        				System.out.print(n);
        				System.out.print(" ");
    				}
    			}
    			//4 从下向上打印 至少有三行两列
    			if(start<endx&&(endy-start)>1) {
    				for(int i=endy-1;i>=start+1;i--) {
    					int n=matrix[i][start];
    					re.add(n);
        				System.out.print(n);
        				System.out.print(" ");
    				}
    			}
    		}
    		
    		System.out.println("   ");
    		start++;
    	}
		return re;
    	
    }
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		N19_1_PrintMatrix n19=new N19_1_PrintMatrix();
		int a[][]= {{1}};
		int b[][]= {{1,2},{3,4}};
		int c[][]= {{1,2,3}};
		int d[][]= {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
		n19.printMatrix(a);
		n19.printMatrix(b);
		n19.printMatrix(c);
		n19.printMatrix(d);
	}

}

  

原文地址:https://www.cnblogs.com/kexiblog/p/11120547.html