public class Solution {
/**
* 二維陣列輸出工具
*
* @param arr 二維資料
* @param length 補齊長度
*/
static void print(int[][] arr, int length) {
for (int[] ints : arr) {
for (int anInt : ints) {
System.out.print(getLengthSpace(anInt, length));
}
System.out.println();
}
}
/**
* 補齊空格工具類
*
* @param num 元素
* @param length 補齊的長度
* @return 補齊之后的元素
*/
static String getLengthSpace(int num, int length) {
StringBuilder result = new StringBuilder(String.valueOf(num));
int size = length - result.length() + 1;
for (int i = 0; i < size; i++) {
result.append(" ");
}
return result.toString();
}
public static void main(String[] args) {
print(fun(100), 5);
}
/**
* 回形陣列構建
*
* @param n 階數
* @return n階陣列
*/
static int[][] fun(int n) {
int[][] arr = new int[n][n];
int start = 1;
//當前構建的層數,默認為0
int layer = 0;
//如果n為偶數則遍歷n/2此,若n為奇數則需要遍歷n/2+1次。
for (int i = 0; i < (n / 2 + n % 2); i++) {
//水平向右填充
for (int first = layer; first < n - 1 - layer; first++) {
arr[layer][first] = start++;
}
//垂直向下填充
for (int second = layer; second < n - 1 - layer; second++) {
arr[second][n - layer - 1] = start++;
}
//水平向左填充
for (int third = n - layer - 1; third > layer; third--) {
arr[n - layer - 1][third] = start++;
}
//垂直向上填充
for (int forth = n - layer - 1; forth > layer; forth--) {
arr[forth][layer] = start++;
}
//進行下一層遍歷
++layer;
}
//n為奇數的時候,陣列最中間的元素無法被填寫。因此手動填充為n*n
if (n % 2 != 0) {
int mid = n >> 1;
arr[mid][mid] = n * n;
}
return arr;
}
}
為什么奇數要多遍歷一次,奇數只剩最后一個數多遍歷一次不會多次改變數值嗎?
比如1 2 3
8 9 4
7 6 5最后只剩9了,再遍歷一次arr[1][1]不是會被先賦9,再10,11,12嗎
————————————————
著作權宣告:本文為CSDN博主「九里寫代碼」的原創文章,遵循CC 4.0 BY-SA著作權協議,轉載請附上原文出處鏈接及本宣告。
原文鏈接:https://blog.csdn.net/a2524289/article/details/109065276
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/270098.html
標籤:Java相關
