`

程序员面试题精选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;
 }
}


分享到:
评论
3 楼 z466459262 2011-09-22  
foreverwey 写道
这个好像不对劲啊。运行出错。

不可能吧。。我以前测试过的。。。
2 楼 foreverwey 2011-09-12  
这个好像不对劲啊,运行出错。
1 楼 foreverwey 2011-09-12  
这个好像不对劲啊。运行出错。

相关推荐

    python-leetcode面试题解之第59题螺旋矩阵II-题解.zip

    以下是针对这个面试题的详细解析。 螺旋矩阵,也被称为螺旋顺序,是一种在二维数组中按照顺时针或逆时针方向填充元素的方式。第59题要求我们实现一个函数,给定一个正方形矩阵的大小n,生成一个n×n的螺旋矩阵。 ...

    Google最新面试题

    ### Google最新面试题解析 #### 1. 合并重叠区间 问题描述:给定一系列范围(由链表或数组表示),例如`[1,3],[2,6],[8,10],[15,18]`,要求编写程序将具有重叠的范围合并,如上例应合并为`[1,6],[8,10],[15,18]`。...

    python-leetcode面试题解之第48题旋转图像-题解.zip

    这道题目是常见的数据结构与算法问题,常见于求职面试,尤其是对于寻找Python开发职位的程序员。LeetCode是一个在线平台,提供了各种编程题目来帮助开发者提升技能并准备面试。 题目的核心是图像处理,具体来说,...

    leetcode分类-nowcoder:牛客网学习,包括剑指offer,程序员面试金典,leetcode,公司模拟真题,数据结构等

    每日刷题计划,记录做过的题目,内容包含剑指offer、程序员面试金典(CTCI)、数据结构 下面标题括号内的为对应包名 剑指offer(offer) java实现 03二维数组中的查找 04替换空格 05从尾到头打印链表 06重建二叉树 07用...

    Python面试准备:算法与数据结构精选编程题集 - 面试技能提升.pdf

    本资源集专门为Python面试者设计,涵盖了从初级到高级的编程题目,帮助学生和程序员提升自己的技能。 1. **回文检查**: 回文是指正读和反读都一样的字符串,如"racecar"。在Python中,实现回文检查可以通过将字符...

    leetcode-cpp刷题

    《LeetCode-CPP刷题》是一本针对程序员面试及算法训练的书籍,由戴方勤编著,旨在帮助读者提升解决算法问题的能力,特别是在准备北美乃至全球范围内技术公司的面试时。本书不仅覆盖了LeetCode在线裁判平台上的所有...

    《剑指Offer》Java代码(高清带目录) (1).pdf

    5. 从尾到头打印链表:这是一个考察对链表结构及其遍历算法理解的面试题。常规链表遍历是从头到尾,而题目要求反向输出,因此可以使用栈、递归或者反转链表等方式来实现。 6. 由前序和中序遍历重建二叉树:这是一类...

    剑指offer编程题66道题目描述及java代码实现汇总

    5. **顺时针打印矩阵**:使用多层循环或栈数据结构实现,理解矩阵的行列关系是关键。 6. **从尾到头打印链表**:反向迭代链表,可以使用栈来辅助实现。 7. **删除链表中的节点**:理解链表结构,直接操作节点引用...

    二维数组螺旋遍历.zip

    这个经典算法面试题旨在考察候选人的逻辑思维能力和对数组操作的理解。通过解决这个问题,程序员可以提高对数组边界处理、循环控制和条件判断的技巧。此外,该问题也可以扩展到多维数组的螺旋遍历,或者实现反向(逆...

    _leetcode-python.pdf

    LeetCode是一个面向程序员的在线编程题库,提供各种编程语言的算法和数据结构题目,用于帮助编程者提升技能,尤其是为了准备技术面试。Python是其中一种可用于解决这些问题的语言,它以其简洁和易读性而受到许多...

    C与C++技能百练---助你快速提高编程能力

    2. **打印旋转方阵**:这是一个关于矩阵操作的问题,可能会用到二维数组和嵌套循环。你将学习如何以特定方式旋转一个矩阵,例如90度顺时针或逆时针旋转。 3. **二分查找法**:这是一道算法题,涉及搜索算法。二分...

    剑指offer(牛客网)

    18. 顺时针打印矩阵:按照顺时针的方向打印出矩阵中的所有元素。 19. 包含min函数的栈:实现一个栈,在其中增加min函数,可以获得栈中最小值。 20. 栈的压入、弹出序列:输入两个序列,判断第二个序列是否为第一个...

Global site tag (gtag.js) - Google Analytics