给定一个n阶段回形数组,然后有序输出:
int attrs[][] = {
{0 ,1 ,2 ,3 },
{11,12,13,4 },
{10,15,14,5 },
{9 ,8 ,7 ,6 },
};
解决:
public class TwoTwo {
public static void main(String[] args) {
int attrs[][] = {
{0, 1, 2, 3},
{11, 12, 13, 4},
{10, 15, 14, 5},
{9, 8, 7, 6},
};
output(attrs);
}
public static void output(int arr[][]){
int row = arr.length; // 行
if (row == 0){
return;
}
int col = arr[0].length; // 列
int count = col * row;
int i = 0;
int j = 0;
while (count > 0){
//输出上面的边 --- 因为 i(行) = 0固定, j(列)一直增加[0];
for (int k = 1; k < col; k++){ //最大可以输出(col)列个数
System.out.print(arr[i][j]+" ");
count --;
j++;
} // 此时 j = col - 1
// 输出右边的边----> 因为j(列) = cow - 1 固定, i(行)一直增加[0]
for (int k = 1; k < row; k++){ // 最大可以输出(row)行个数
System.out.print(arr[i][j]+" ");
count--;
i++;
} // 此时 i = row - 1
// 输出下边的边-----> 此时i(行) = cow -1固定,j(列)一直减少[cow-1]
for (int k = 1; k < col ; k++) { // col列
System.out.print(arr[i][j] + " ");
count -- ;
j --;
} // 此时 j = 0
// 输出左边的边-----> 此时j(列) = 0固定,i(行)一直减少[row-1]
for (int k = 1; k < row ; k++) { // col列
System.out.print(arr[i][j] + " ");
count -- ;
i --;
}
// 其实位置确定:第一次从[0][0]开始,第二次从[1][1]开始,[2][2],[3][3] 。。。
i ++;
j ++;
// 每次都会减少2行2列
row = row - 2;
col = col - 2;
}
}
}