力扣2596

2023-09-14 10:54:44

题目来源

示例 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;

}

更多推荐

基于JAVA+SSM+微信小程序+MySql的图书捐赠管理系统设计与实现

✌全网粉丝20W+,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌🍅文末获取项目下载方式🍅一、项目背景介绍:在当今社会,图书捐赠是一种普遍而有益的行为,旨在促进阅读、教育和知识传播。图书捐赠可

手动模式配置链路聚合

以下图配置为例:各PC配置如下配置LSW1#划分vlan1030<Huawei>sysEntersystemview,returnuserviewwithCtrl+Z.[Huawei]sysnameLSW1[LSW1]diSep16202314:23:44-08:00LSW1DS/4/DATASYNC_CFGCHANG

记:sx1278芯片

目录lora数字接口静态配置寄存器状态寄存器lora模式FIFO数据缓存数字IO引脚映射FIFO操作原理lora调制解调器操作模式LoRa调制解调器状态机序列数据发送序列数据接收序列单一接收操作模式连续接收操作模式从FIFO数据缓存提取有效负载数据基于前导码起始的数据包过滤lora数字接口lora调制解调器有三种数字接

计算物理专题----随机游走实战

计算物理专题----随机游走实战Problem1Implementthe3Drandomwalk拟合线自旋的拟合函数(没有数学意义)参数:0.627,3.336,0.603,-3.234自由程满足在一定范围内的均匀分布以标准自由程为单位长度,可得到均匀分布的统计特征方均根距离与平均自由程的比值满足P1-a.pyimpo

【Redis】深入探索 Redis 的哨兵(Sentinel)机制原理,基于 Docker 模拟搭建 Redis 主从结构和哨兵分布式架构

文章目录一、对RedisSentinel的认识1.1什么是RedisSentinel1.2为什么要使用RedisSentinel1.2.1主从复制问题1.2.2人工恢复主节点故障二、RedisSentinel原理剖析2.1RedisSentinel架构2.2Raft算法和领袖节点2.3哨兵节点2.4故障检测2.5故障切

JimuReport积木报表 v1.6.2 版本正式发布—开源免费的低代码报表

项目介绍一款免费的数据可视化报表,含报表和大屏设计,像搭建积木一样在线设计报表!功能涵盖,数据报表、打印设计、图表报表、大屏设计等!Web版报表设计器,类似于excel操作风格,通过拖拽完成报表设计。秉承“简单、易用、专业”的产品理念,极大的降低报表开发难度、缩短开发周期、节省成本、解决各类报表难题。领先的企业级Web

BIO AIO NIO 的区别

BIOAIONIO是Java中用于I/O操作的三种不同的编程模型。它们的区别在于它们执行I/O操作的方式和效率。在讲BIO,NIO,AIO之前先来回顾一下这样几个概念:同步与异步,阻塞与非阻塞。同步与异步同步:同步就是发起一个调用后,被调用者未处理完请求之前,调用不返回。异步:异步就是发起一个调用后,立刻得到被调用者的

基于Qt4开发曲线绘制交互软件Plotter

目前市面上有很多曲线绘制软件,但其交互功能较差。比如,想要实现数据的交互,同步联动等,都需要大量繁琐的人工操作。所以讲想开发一款轻量级的曲线绘制交互软件。下面就以此为案例,记录一下基于Qt4的开发过程。目录1需求2技术路线3开发流程1框架搭建2菜单3数据改动和右键菜单4阶段性测试5多条曲线问题6颜色和风格设置7绘图的清

如何将Docker与Kubernetes集成,实现云原生应用程序

文章目录1.容器化应用程序2.将镜像推送到容器仓库3.部署到Kubernetes4.应用程序扩展和管理DockerSwarmvs.Kubernetes:容器编排的比较1.配置和学习曲线2.功能和生态系统3.扩展性和容错性4.社区和支持🎈个人主页:程序员小侯🎐CSDN新晋作者🎉欢迎👍点赞✍评论⭐收藏✨收录专栏:云

SEO方案尝试--Nuxtjs项目基础配置

Nuxtjs最新版Nuxt3项目配置安装nuxtjs最新版Nuxt3参考官网安装安装插件安装ElementPlus页面怎么跳转,路由怎么实现404页面该怎么配置配置网页的title安装nuxtjs最新版Nuxt3参考官网安装安装插件安装ElementPlus安装ElementPlus和图标库#首先,使用以下命令安装El

Mybatis学习笔记11 缓存相关

Mybatis学习笔记10高级映射及延迟加载_biubiubiu0706的博客-CSDN博客缓存:cache缓存的作用:通过减少IO的方式,来提高程序的执行效率Mybatis的缓存:将select语句的查询结果放到缓存(内存)当中,下一次还是这条select语句的话,直接从缓存中取,不再查数据库.一方面是减少了IO.另

热文推荐