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