题目链接: 剑指Offer 29. 顺时针打印矩阵
题目描述:
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
解法思路:
本题的题意比较简单,也就是螺旋打印矩阵,但是这里面有技巧,
- 使用 数组 定义好在打印过程中的四个移动方向
- 在遍历的过程中,每次都是在该方向上移动,
- 当移动到下一个点时,要判断这个下一个点是否合法(也就是之前访问过没,判断越界没)
- 如果访问过或越界,那么调整方向,换下一个方向执行
- 最后更新x,y的值。
代码:
func spiralOrder(matrix [][]int) []int {
n := len(matrix)
if n == 0 {
return nil
}
m := len(matrix[0])
dx := [4]int{0,1,0,-1} //右、下、左、上
dy := [4]int{1,0,-1,0}
// res := make([]int,n*m)
var res []int
use := make([][]bool,n)
for i:= 0 ;i<n;i++{
use[i] = make([]bool,m)
}
x := 0
y := 0
d := 0
for i := 0 ; i < n*m ;i++{
res = append(res,matrix[x][y])
use[x][y] = true
a := x + dx[d]
b := y + dy[d]
if a < 0 || a >= n || b < 0 ||b >= m ||use[a][b] == true{
d = (d+1)%4
a = x + dx[d]
b = y + dy[d]
}
x = a
y = b
}
return res
}
标签:顺时针,matrix,Offer,int,打印,矩阵,29
From: https://www.cnblogs.com/lxing-go/p/17660711.html