从外向里以顺时针的顺序依次打印出矩阵的每一个数字

20 篇文章 0 订阅

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


设计测试用例:

 
int arr[][]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
int arr[][]={{1,2,3},{4,5,6},{7,8,9}};
   
int arr[][]={};
int arr=null;
int arr[][]={{1}};
int arr[][]={{1,2,3,4,5},{6,7,8,9,10}};

int arr[][]={{1,2,3,4,5}};

int arr[][]={{1},{2},{3},{4},{5}};


思路概述:首先控制能打印多少圈,然后分别打印每一圈。
如下代码可以直接在java1.7环境下运行通过。
package com.mytest.mymain;


import java.util.ArrayList;
public class TTest {
public static void main(String[] args) {
ArrayList<Integer> al=new ArrayList<Integer>();
int arr[][]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
//int arr[][]={{1},{2},{3},{4},{5}};
int arr[][]={{1,2,3},{4,5,6},{7,8,9}};
//int arr[][]={};
 //int arr[][]={{1}};
///int arr[][]={{1,2,3,4,5},{6,7,8,9,10}};
///int arr[][]={{1,2,3,4,5}};
if(arr==null || arr.length==0)
return;
al=printMatrix(arr);
System.out.println(al);
}

    public static ArrayList<Integer> printMatrix(int [][] matrix) {
        ArrayList<Integer> al=new ArrayList<Integer>();
       if(matrix==null)
return null;
//打印圈行大于2s,列大于2s;
int start=0;
while(matrix[0].length>2*start && matrix.length>2*start){   //控制打印多少圈的                                                                                                        //条件,这个很重要。
al=printcircle(al,matrix,start);
start++;
}
        
       return al;
    }
    
     private static ArrayList<Integer> printcircle(ArrayList<Integer> all,int[][] aa, int start) {


for(int i=start;i<aa[0].length-start;i++){//打印一边
System.out.println("111:"+aa[start][i]);
all.add(aa[start][i]);
}

for(int i=start+1;i<aa.length-start;i++){//打印一边,注意不要重复打印拐角
System.out.println("222:"+aa[i][aa[0].length-start-1]);
all.add(aa[i][aa[0].length-start-1]);
}

if(aa.length-start-1>start){//防止从右向左打印和从左向右边打印重复,否则测试
         //用例int arr[][]={{1,2,3,4,5}};输出为:1,2,3,4,5,4,3,2      
for(int i=aa[0].length-start-2;i>=start;i--){//打印一边
System.out.println("333:"+aa[aa.length-start-1][i]);
all.add(aa[aa.length-start-1][i]);
}
}

if(aa[0].length-start-1>start){
                                                 //防止从右向左打印和从左向右边打印重复,否则测试
        //例int arr[][]={{1},{2},{3},{4},{5}};输出为:1,2,3,4,5,4,3,2  

for(int i=aa.length-start-2;i>start;i--){//打印一边
System.out.println("444:"+aa[i][start]);
all.add(aa[i][start]);
}
}
         
         return all;

}
}

运行效果:






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值