最近遇到一个面试题。
给定一个数字n,输出一个n阶矩阵。矩阵中的元素为1到n²。按回形排列
eg1 :
输入:n=2
输出:
1 2
4 3
eg2:
输入:n=3
输出:
1 2 3
8 9 4
7 6 5
思路:
这个题属于现实中遇到很简单,但是程序实现还是有些难度的问题。
面试的时候面试官让我手写出这个问题的解法,无奈最后实在没写出来。纸上写代码太难了。
这个问题其实需要分成三个层次去看。
第一层看出来,此问题需要一个二维数组解决
第二层看出来,此问题一个有四种操作数组的情况
第三层看出来,此问题可以按层次操作。
明白这三层思路,那就能解决问题了。但是还是有几个边界问题需要处理
1. 如何划分四种操作的操作范围
这个问题其实看你的习惯,我这里是按平均分配的原则分配给了四次操作。每次操作处理n-1-当前层数次
2. n为奇数的时候,最内层只有一个元素。此时按下面方法无法被处理。因此如果n为奇数时直接将最内层的填充为n*n
代码
public class Solution {
/**
* 二维数组输出