读书人

软件工程师面试题精选100题(51)-顺时针

发布时间: 2012-11-01 11:11:32 作者: rapoo

程序员面试题精选100题(51)-顺时针打印矩阵
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字

例如:如果输入如下矩阵:

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。

public class Car {  private int x=0;  private int y=-1;  Direction direction = Direction.E;  private int[][] arr ;  private int minX=-1;  private int minY=-1;  private int maxX;  private int maxY;    public Car(int[][] arr){   maxX = arr.length;   maxY = arr[0].length;   this.arr=arr;  }  public void move(){  if(maxX==minX&&maxY==minY){  return;  }    switch(direction){   case N:  if(x-1<=minX){  minY++;  direction=Direction.E;  }else{  x--;  System.out.print(arr[x][y]+" ");  }  break;  case E:  if(y+1>=maxY){  minX++;  direction=Direction.S;  }else{  y++;   System.out.print(arr[x][y]+" ");  }  break;  case S:  if(x+1>=maxX){  maxY--;  direction=Direction.W;  }else{  x++ ;  System.out.print(arr[x][y]+" ");  } break;  case W:  if(y-1<=minY){  maxX--;  direction=Direction.N;  }else{  y--;  System.out.print(arr[x][y]+" ");  } break;  }  move();  }  public static void main(String[] args) {  int[][] arr = new int[4][4];  int k=1;  for(int i=0;i<4;i++){  for(int j=0;j<4;j++){  arr[i][j]=k;  k++;  }  }Car c = new Car(arr);c.move();}  enum Direction {N,E,S,W; }}
1 楼 foreverwey 2011-09-12 这个好像不对劲啊。运行出错。 2 楼 foreverwey 2011-09-12 这个好像不对劲啊,运行出错。 3 楼 z466459262 2011-09-22 foreverwey 写道这个好像不对劲啊。运行出错。
不可能吧。。我以前测试过的。。。

读书人网 >编程

热点推荐