力扣2596

题目来源

示例 1:

复制代码
输入:grid = [[0,11,16,5,20],[17,4,19,10,15],[12,1,8,21,6],[3,18,23,14,9],[24,13,2,7,22]]
输出:true
解释:grid 如上图所示,可以证明这是一个有效的巡视方案。

示例 2:

复制代码
输入:grid = [[0,3,6],[5,8,1],[2,7,4]]
输出:false
解释:grid 如上图所示,考虑到骑士第 7 次行动后的位置,第 8 次行动是无效的。

提示:

  • n == grid.length == grid[i].length
  • 3 <= n <= 7
  • 0 <= grid[row][col] < n * n
  • grid 中的所有整数 互不相同

核心思想:不管怎么走下一步,开始位置和下一步的位置的横坐标和纵坐标的差的积的绝对值为2,如果不为2的话,那么就说明走错了,返回false

复制代码
if(grid[0][0]!=0){
        return false;
    }

题目要求从左上角开始,那么首先要有一个判断骑士是否从左上角开始的语句

复制代码
 int n = gridSize;
   int arr[n*n][2];
   for(int i = 0;i<n;i++){
       for(int j = 0;j<n;j++){
           arr[grid[i][j]][0] = i;
           arr[grid[i][j]][1] = j;
       }
   }

重新定义了一个数组arr,下标表示第几次跳到的格子,里面所对应的是(x,y)坐标

复制代码
for(int i = 1;i<n*n;i++){
       int x = abs(arr[i][0] - arr[i-1][0]);
       int y = abs(arr[i][1] - arr[i-1][1]);
       if(x*y!=2){
           return false;
       }

   }
   return true;

循环遍历上面定义的数组arr,由上述的arr数组的意义所知,arr[i][0]表示的是第i次被跳到的格子所对应的x坐标,那么arr[i-1][0]就是第i-1次跳到的格子的x坐标,以此算出x,y的差距,然后相乘,如果相乘不等于2的话,说明这个跳的格子有问题,就返回false,将所有坐标都遍历完之后,没有发现不匹配的格子,那么就返回true

完整代码:

复制代码
bool checkValidGrid(int** grid, int gridSize, int* gridColSize){
    
    if(grid[0][0]!=0){
        return false;
    }

   int n = gridSize;
   int arr[n*n][2];
   for(int i = 0;i<n;i++){
       for(int j = 0;j<n;j++){
           arr[grid[i][j]][0] = i;
           arr[grid[i][j]][1] = j;
       }
   }
   for(int i = 1;i<n*n;i++){
       int x = abs(arr[i][0] - arr[i-1][0]);
       int y = abs(arr[i][1] - arr[i-1][1]);
       if(x*y!=2){
           return false;
       }

   }
   return true;

}
相关推荐
我叫汪枫5 分钟前
C语言深度入门系列:第十一篇 - 动态内存管理与数据结构:程序世界的高效算法大师
c语言·数据结构·算法
空山新雨(大队长)8 分钟前
Java第五课:输入输出
java·开发语言
Li_7695329 分钟前
优选算法100 题 ——1 双指针
算法
白云如幻11 分钟前
【Java】QBC检索和本地SQL检索
java·数据库·sql
77qqqiqi12 分钟前
算法——数学基础
算法
啊?啊?12 分钟前
7 排序算法通关指南:从 O (n²)(选择 / 冒泡)到 O (nlogn)(快排 / 归并)+ 计数排序
数据结构·算法·排序算法
张较瘦_15 分钟前
[论文阅读] 算法 | 抗量子+紧凑!SM3-OTS:基于国产哈希算法的一次签名新方案
论文阅读·算法·哈希算法
芒克芒克17 分钟前
LeetCode 面试经典 150 题:多数元素(摩尔投票法详解 + 多解法对比)
算法·leetcode·面试
wow_DG17 分钟前
【Vue2 ✨】Vue2 入门之旅 · 进阶篇(二):虚拟 DOM 与 Diff 算法
开发语言·javascript·vue.js·算法·前端框架
和光同尘 、Y_____19 分钟前
BRepMesh_IncrementalMesh 重构生效问题
c++·算法·图形渲染