/**
* dhcc-fxq
*/
package com.tuodier.test.test;
/**
* @author lidehu
* @create 2019-08-07 13:18
*/
public class N阶矩阵打印 {
private static int n = 10;
private static int[][] arr = new int[n][n];
private static int turnNum = 0;
private static int value = 1;
private static Coordinate lastCoordinate = new Coordinate(0, 0);
public static void main(String[] args) {
for (int i = 0; i < n*n; i++) {
template();
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
System.out.print(arr[j][i]+" ");
}
System.out.println("\n");
}
}
private static void template() {
arr[lastCoordinate.x][lastCoordinate.y] = value;
Coordinate nextCoordinate = walk(lastCoordinate);
if(turn(nextCoordinate)) {
turnNum++;
lastCoordinate = walk(lastCoordinate);
} else {
lastCoordinate = nextCoordinate;
}
value++;
}
private static Coordinate walk(Coordinate lastCoordinate) {
switch(turnNum % 4) {
case 0 : return walkRight(lastCoordinate);
case 1 : return walkDown(lastCoordinate);
case 2 : return walkLeft(lastCoordinate);
case 3 : return walkUp(lastCoordinate);
}
return null;
}
private static Coordinate walkUp(Coordinate lastCoordinate) {
return new Coordinate(lastCoordinate.x, lastCoordinate.y - 1);
}
private static Coordinate walkDown(Coordinate lastCoordinate) {
return new Coordinate(lastCoordinate.x, lastCoordinate.y + 1);
}
private static Coordinate walkLeft(Coordinate lastCoordinate) {
return new Coordinate(lastCoordinate.x - 1, lastCoordinate.y);
}
private static Coordinate walkRight(Coordinate lastCoordinate) {
return new Coordinate(lastCoordinate.x + 1, lastCoordinate.y);
}
private static boolean turn(Coordinate nextCoordinate) {
final int x = nextCoordinate.x;
final int y = nextCoordinate.y;
if(outOfBounds(x, y) || arr[x][y] != 0) {
return true;
}
return false;
}
private static boolean outOfBounds(int x, int y) {
return x == n || x == -1 || y == n || y == -1;
}
}
class Coordinate {
int x;
int y;
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public Coordinate() {
}
public Coordinate(int x, int y) {
this.x = x;
this.y = y;
}
}
腾讯试题——N阶矩阵螺旋打印
最新推荐文章于 2021-01-18 19:20:59 发布