【每日一题】 2596-检查骑士巡视方案

71 阅读1分钟

题目描述

image.png

image.png leetcode.cn/problems/ch…

思路

刚开始以为是向量机, 需要用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难度