天天看點

面試算法題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,

補充:最後一個逗号未作處理;另外,算法可以再優化。