首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

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

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

程序员面试题精选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 写道这个好像不对劲啊。运行出错。
不可能吧。。我以前测试过的。。。

热点排行