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