下午无聊的时候,在逛博客的时候,看到一篇说螺旋矩阵(暂且这么命名吧)的问题,我就试着用java实现下。
----下面是原博客的内容----
规律数组的打印
【北京直真笔试题】打印数组如下4*4数组,要求打印N*N的数组?
1 12 11 10
2 13 16 9
3 14 15 8
4 5 6 7
【思路】:
----原博客提出的问题到此为止---
下面是我自己写的代码,工程利用原来的,命名不规范,大家谅解下啊!
我的思路:
其实第一圈很容易实现,然后就是一圈圈的向内实现。在编写的过程中主要是注意数组不能越界
代码如下
package com.rabbit;
public class Rabbit {
public static void main(String[] args) {
int N = 7;
int[][] a = arrary(N);
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
System.out.print(a[i][j] + " ");
}
System.out.println();
}
}
static int[][] arrary(int N) {
int i, j = 0;
int[][] A = new int[N][N];
// 最外面的一圈赋值
A[0][0] = 1;
for (i = 1; i < N; i++) {
A[i][j] = A[i - 1][j] + 1;
}
for (j = 1; j < N; j++) {
A[i - 1][j] = A[i - 1][j - 1] + 1;
}
for (i = N - 2; i >= 0; i--) {
A[i][j - 1] = A[i + 1][j - 1] + 1;
}
for (j = N - 2; j > 0; j--) {
A[i + 1][j] = A[i + 1][j + 1] + 1;
}
// 给后面的进行赋值
int k = 1;
for (k = 1; k < N / 2 + 1; k++) {
for (i = k, j = k; i < N - k; i++) {
A[i][j] = A[i - 1][j] + 1;
}
for (j = k + 1; j < N - k; j++) {
A[i - 1][j] = A[i - 1][j - 1] + 1;
}
for (i = N - 2 - k; i >= k; i--) {
A[i][j - 1] = A[i + 1][j - 1] + 1;
}
for (j = N - 2 - k; j > k; j--) {
A[i + 1][j] = A[i + 1][j + 1] + 1;
}
}
return A;
}
}