某厂面试题,定义一个int类型变量N,控制台打印结果如下:
N=4:
01 02 03 04
12 13 14 05
11 16 15 06
10 09 08 07
N=6:
01 02 03 04 05 06
20 21 22 23 24 07
19 32 33 34 25 08
18 31 36 35 26 09
17 30 29 28 27 10
16 15 14 13 12 11
N的取值为正整数,按要求写出该方法。
题目分析:
以N=6的6x6阶矩阵为例:
抽象定义该矩阵每层外圈的四个角自左上到左下顺时针为:ABCD
如第一圈:01-06-11-16
第二圈的A-B-C-D为20-07-10-17
除去第一行后续方向 B-C&C-D长度相等,
且连接BD可形成等边三角形,
且其边长自N-1开始,每1个等腰三角形形成后长度-1。
抽象理解回形数字流转方向,自B开始 BC CD DA AB流转顺序为:下左上右 循环
除去第一行后,第一个等腰三角形三点为07-11-16
两腰分别为:07 08 09 10 11 - 12 13 14 15 16 长度为N-1=5
下一个三角形与此类似且长度为N-1-1=4
因此我们定义几个变量
- 方向:表示数字流转方向:下左上右 4次一循环
- 下左上右分别为:0 1 2 3
- 边长:每两条形成后,边长自N-1开始以1 为步长递减
面对N阶矩阵,可将其放入二维数组中,本文采用Java语言进行解题
NxN阶行列式 生命NxN大小的二维数组
private static final int DOWN = 0; //向下
private static final int LEFT = 1; //向左
private static final int UP = 2; //向上
private static final int RIGHT = 3; //向右
public static void main(String