1.题目
前一段时间面试字节跳动,其中有个算法题,是让根据n打印以下方阵,当时并没有做出来,现在回想起来,就趁着闲功夫做了一下。
n = 3 时
1 2 3
8 9 4
7 6 5
n = 4时
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
也就是从外圈往里面以此增加。
2.解答
func main() {
PrintMatrix(CreateMatrix(1))
}
//填充矩阵
func CreateMatrix(n int) [][]int {
//初始化矩阵
res := make([][]int, n)
for i := 0; i < n; i++ {
res[i] = make([]int, n)
}
//问题关键,填充值。
num,all:= 0,n * n
x, y := 0, -1
for num <= all && n >=0 {
//先向右走n个格
for i := 0; i < n; i++ {
y++
num++
res[x][y] = num
}
//向下走n-1个格
for i := 0; i < n-1; i++ {
x++
num++
res[x][y] = num
}
//向左走n-1个格
for i := 0; i < n-1; i++ {
y--
num++
res[x][y] = num
}
//向上走?格n-2
for i := 0; i < n-2; i++ {
x--
num++
res[x][y] = num
}
n -= 2
}
return res
}
//打印矩形
func PrintMatrix(n [][]int) {
for i := 0; i < len(n); i++ {
for j := 0; j < len(n[0]); j++ {
fmt.Print(n[i][j], "\t")
}
fmt.Println()
}
}
结果:n =5 和 6 的情况