题目描述
思路
刚开始以为是向量机, 需要用dp,后来仔细看了示例2,发现是简单的模拟题,只需要按照格子里的数字依次访问即可。 解决办法是遍历这个矩阵,存储格子里的值和对应的横纵坐标,由于是“日”字形,需要将前后位置的坐标之差乘一下,不是2就代表没按“日”字走。
代码
func checkValidGrid(grid [][]int) bool {
if grid[0][0] != 0 {
return false
}
n := len(grid)
initQ := make([][2]int, n*n)
for i := 0; i < n; i++ {
for j := 0; j < n; j++ {
initQ[grid[i][j]][0] = i
initQ[grid[i][j]][1] = j
}
}
for i := 1; i < n; i++ {
dx := abs(initQ[i][0] - initQ[i-1][0])
dy := abs(initQ[i][1] - initQ[i-1][1])
if dx*dy != 2 {
return false
}
}
return true
}
func abs(a int) int {
if a < 0 {
return -1 * a
}
return a
}
有的没的
感觉自己好像变强了,这种题怎么看也不像med难度