面试总结之 迷宫型类题

题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字 

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

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

这道题我在google,onsite的时候遇到了, 当时纠结了好久,因为不知道如何让object去变化的移动.这是考点1. switch + recursion 

考点2是 如何证明你的想法是正确的,其实就是switch出来按顺序1,2,3,4,5   a[i]=k  k++. 就可以了.

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; } }

 

转载于:https://www.cnblogs.com/leetcode/p/3199774.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值