天天看点

面试算法题2

版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/1536661

面试算法题2

package myfile;

/**

 * 请用Java语言写一个函数printArray(int[][] aData),该函数将一个二维数组以顺时针螺旋的方式打印出来。

 * 例如,对数组:

 * 1 2 3 4 5

 * 14 15 16 17 6

 * 13 20 19 18 7

 * 12 11 10 9 8

 *

 * 打印出来的序列应该是:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20

 * @author J

 *

 */

public class Mymethod2 {

 public static int[][] arr={{1,2,3,4,5},{14,15,16,17,6},{13,20,19,18,7},{12,11,10,9,8}};

 public static void main(String[] args) {

  Mymethod2 program=new Mymethod2();

  program.printArray(arr);  

 }

 public void printArray(int[][] aData){

  Character[] dire={'E','S','W','N'};

  //System.out.println(dire.length);

  char p=dire[0];

  Boolean loop1=true;

  int h1=0,h2=aData[0].length-1;

  int v1=0,v2=aData.length-1;

  //System.out.println(v2);

  int i=0;

  while(loop1){

   p=dire[i];

   if(v1>v2 || h1>h2) loop1=false;

   if(p=='E'){

    forwardPrint(h1,h2,v1,v1,aData);

    //++h1;

    ++v1;

   }

   if(p=='S'){

    forwardPrint(h2,h2,v1,v2,aData);

    //--v2;

    --h2;

   if(p=='W'){

    reversePrint(h1,h2,v2,v2,aData);

    //--h2;

    --v2;

   if(p=='N'){

    reversePrint(h1,h1,v1,v2,aData);

    //++v1;

    ++h1;

   ++i;

   if(i==4) i=0;

  }

 public void forwardPrint(int a1, int a2, int b1, int b2, int[][] c){

  for(int j=b1;j<=b2;j++){

   for(int k=a1;k<=a2;k++){

    System.out.print(c[j][k]+",");    

 public void reversePrint(int a1, int a2, int b1, int b2, int[][] c){

  for(int j=b2;j>=b1;j--){

   for(int k=a2;k>=a1;k--){

}

--------------------------------------------------------------------------------------------------------------

输出结果:

1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,

补充:最后一个逗号未作处理;另外,算法可以再优化。