Golang leetcode59 螺旋矩阵
2023-12-23 17:58:21
螺旋矩阵 leetcode59
初次尝试,从中心向外
func main() {
n := 3
fmt.Println(generateMatrix(n))
}
// 初版,我们从中心点开始
func generateMatrix(n int) [][]int {
//1.nXn矩阵
table := make([][]int, n)
for i := 0; i < n; i++ {
table[i] = make([]int, n)
//fmt.Println(table[i]) //确认生成n*n
}
//2.确定中心点位置
//n=1, (0,0)
//n=2, (1,0)
//n=3, (1,1)
//n=4, (2,1)
var x, y = 0, 0 //中心点坐标
x = n / 2
y = (n - 1) / 2
fmt.Println("n:", n, " x:", x, " y:", y)
table[x][y] = n * n
//3.填充
var char = 0 //都是从横行开始移动, 横竖移动标志位
var char2 int //到底是向左还是向右
var char3 int //到底是向上还是向下
if n%2 == 1 {
char3 = 1
char2 = -1
} else {
char3 = -1
char2 = 1
}
var c = 1
for t, i := 1, n*n-1; i >= 0; { //总共填入n*n个数 ,t为当前运行的次数,i为本次填入的数据
for e := 0; e < 2; e++ {
tem := (c + 1) / 2 //1,1,2,2,3,3
if char == 0 { //横着动
for tem > 0 {
y = y + char2
if y == n+1 || y == -1 {
return table
}
table[x][y] = i
i--
t++
tem--
}
char2 = -char2
char = 1
} else { //竖着动
for tem > 0 {
x = x + char3
if x == n+1 || x == -1 {
return table
}
table[x][y] = i
i--
t++
if t == n*n {
return table
}
tem--
}
char3 = -char3
char = 0
}
c++
}
}
return table
}
模拟方式
func generateMatrix(n int) [][]int {
//1.nXn矩阵
table := make([][]int, n)
for i := 0; i < n; i++ {
table[i] = make([]int, n)
//fmt.Println(table[i]) //确认生成n*n
}
i := 1 //需要填入的数据
c := n - 1
layerNums := 0 //第几层
for ; c >= 0; c = c - 2 { //记每次循环每层每边中间间隔的个数,c=0时为最后中心只有一个数的那层
//n=2 2X2 C:1
//n=3 3X3 C:2 -> 0
/*
1 2 3
4 5 6
7 8 9
*/
//n=4 4X4 C:3 -> 1
/*
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
*/
x, y := layerNums, layerNums //记每层模拟的起始点
table[x][y] = i
for b := 0; b < c; b++ {//先向右横
table[x][y] = i
y++
i++
}
for b := 0; b < c; b++ {//向下竖
table[x][y] = i
x++
i++
}
for b := 0; b < c; b++ {//向左横
table[x][y] = i
y--
i++
}
for b := 0; b < c; b++ {//向上竖
table[x][y] = i
x--
i++
}
//由于我们写入实际在下次循环才写入,所以最后一位的原点实际并未覆盖
layerNums++//层数计数加一
}
return table
}
文章来源:https://blog.csdn.net/kingsill/article/details/135168032
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!