首页 > 学院 > 开发设计 > 正文

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

2019-11-08 02:25:08
字体:
来源:转载
供稿:网友

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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表