分析:
1.首先矩陣對應(yīng)一個二維數(shù)組聂儒,所以我們要定義一個二維數(shù)組a
2.矩陣邊長為l
=n,最大值為l x l
3.填充數(shù)組a[x,y]踪少,確定起始位置哆窿,我選擇從a[0,0]
開始
4.填上邊 a[0,0]
,a[0,1]
,a[0,2]
...a[0,l-1]
每次y++
5.填右邊 a[0,l-1]
,a[1,l-1]
...a[l-1,l-1]
每次x++
6.填下邊 a[l-1,l-2]
,a[l-1,l-3]
...a[l-1,0]
每次y--
7.填左邊 a[l-2,0]
,a[l-3,0]
...a[0,1]
每次x--
8.循環(huán)4农曲、5社搅、6、7乳规,l x l個數(shù)全填完結(jié)束
從中心順時針打印
func matrix(n int) {
/*
n=5
從里向外順時針打印 坐標(biāo)
25 10 11 12 13 0,0 0,1 0,2 0,3 0,4
24 9 2 3 14 1,0 1,1 1,2 1,3 1,4
23 8 1 4 15 2,0 2,1 2,2 2,3 2,4
22 7 6 5 16 3,0 3,1 3,2 3,3 3,4
21 20 19 18 17 4,0 4,1 4,2 4,3 4,4
*/
l := n //邊長度
num := l * l //矩陣最大值
a := make([][]int, l) //初始化二維數(shù)組
for key := range a {
a[key] = make([]int, l)
}
x := 0 //坐標(biāo)0,0開始填充數(shù)組
y := 0
for num > 0 { //num遞減填充到a形葬,到1結(jié)束
for x < l && a[x][y] == 0 { //填充左邊,注意越界和填充完一圈后不要覆蓋已填充的值
a[x][y] = num
x++
num--
}
x-- //x==邊長x自增了暮的,需要減1
y++ //左下角已填入笙以,從y+1開始填充下邊
for y < l && a[x][y] == 0 { //填充下邊
a[x][y] = num
y++
num--
}
y--
x--
for 0 <= x && a[x][y] == 0 { //填充右邊,填充到0結(jié)束
a[x][y] = num
x--
num--
}
x++
y--
for 0 <= y && a[x][y] == 0 { //填充上邊
a[x][y] = num
y--
num--
}
y++
x++
}
//打印結(jié)果
for i := 0; i < len(a[0]); i++ {
for j := 0; j < len(a[0]); j++ {
fmt.Printf("%2d%s", a[i][j], " ")
}
fmt.Println()
}
//打印坐標(biāo)
for i := 0; i < len(a[0]); i++ {
for j := 0; j < len(a[0]); j++ {
fmt.Printf("%d%s%d%s", i, ",", j, " ")
}
fmt.Println()
}
}
從左上角順時針打印
func matrix(n int) {
/*
n=5
從外向內(nèi)順時針打印 坐標(biāo)
1 2 3 4 5 0,0 0,1 0,2 0,3 0,4
16 17 18 19 6 1,0 1,1 1,2 1,3 1,4
15 24 25 20 7 2,0 2,1 2,2 2,3 2,4
14 23 22 21 8 3,0 3,1 3,2 3,3 3,4
13 12 11 10 9 4,0 4,1 4,2 4,3 4,4
*/
l := n //邊長度
num := 1 //矩陣初始值
a := make([][]int, l) //初始化二維數(shù)組
for key := range a {
a[key] = make([]int, l)
}
x := 0 //坐標(biāo)0,0開始填充數(shù)組
y := 0
for num <= l*l { //num遞增填充到a,最大值l*l
for y < l && a[x][y] == 0 { //填充上邊
a[x][y] = num
y++
num++
}
y--
x++
for x < l && a[x][y] == 0 { //填充右邊
a[x][y] = num
x++
num++
}
x--
y--
for 0 <= y && a[x][y] == 0 { //填充下邊
a[x][y] = num
y--
num++
}
y++
x--
for 0 <= x && a[x][y] == 0 { //填充左邊
a[x][y] = num
x--
num++
}
x++
y++
}
//打印結(jié)果
for i := 0; i < len(a[0]); i++ {
for j := 0; j < len(a[0]); j++ {
fmt.Printf("%2d%s", a[i][j], " ")
}
fmt.Println()
}
//打印坐標(biāo)
for i := 0; i < len(a[0]); i++ {
for j := 0; j < len(a[0]); j++ {
fmt.Printf("%d%s%d%s", i, ",", j, " ")
}
fmt.Println()
}
}