Leetcode 1812。判断国际象棋棋盘中一个格子的颜色
国际棋盘问题:
给你一个坐标
coordinates
,它是一个字符串,表示国际象棋棋盘中一个格子的坐标。下图是国际象棋棋盘示意图。
如果所给格子的颜色是白色,请你返回
true
,如果是黑色,请返回false
。给定坐标一定代表国际象棋棋盘上一个存在的格子。坐标第一个字符是字母,第二个字符是数字。
示例 1:
输入:coordinates = "a1" 输出:false 解释:如上图棋盘所示,"a1" 坐标的格子是黑色的,所以返回 false 。示例 2:
输入:coordinates = "h3" 输出:true 解释:如上图棋盘所示,"h3" 坐标的格子是白色的,所以返回 true 。示例 3:
输入:coordinates = "c7" 输出:false提示:
coordinates.length == 2
'a' <= coordinates[0] <= 'h'
'1' <= coordinates[1] <= '8'
我的答案:
一、信息
1.给我一个坐标coordinates
2.它是字符串
3.表示国际象棋棋盘中的一个格子的坐标
4.规则:如果所给格子的颜色是白色—true 如果是黑色返回false。
5.给定坐标一定存在
6.坐标字符顺序 字母 数字
二、分析
所有的条件都是为了一个目的:就是输入坐标然后输出颜色
那么如何实现这个操作呢?
三、步骤
其实步骤很简单就分为两步,但是实现原理我有两种思路,第一种数学归纳法 就是通过数学规律求出规律然后求解 第二种 模拟 模拟有分两种通过二进制10101010来近似模拟黑白黑白相间的情况,第二种就是通过异或来实现不一样
分析:
两条思路都遇到问题,很简单第一种思路由于不是纯数字所有在判断上要作转换
第二同样的道理
思路一 数学归纳
两个官方答案:
C语言:
英雄师傅题解
bool squareIsWhite(char * coordinates){int x = coordinates[0]-'a';//(1)计算x坐标到原点的距离int y = coordinates[1]-1;//(2)计算y坐标到原点的距离return (x+y)%2;//(3)其实就是运用观察出来的规律我们发现只要是能被2整除的数都是黑否则都是白
}
C++:
Leetcode题解
class Solution {
public:bool squareIsWhite(string coordinates) {return((coordinates[0]-'a'+1+coordinates[1]-'0'))%2==1;}
};
两种思路都是对的只不过第一种return跟加简洁
思路二 异或模拟
当然可以。使用异或运算是一个非常巧妙的方式来处理这种问题。如果我们观察两个二进制数字的异或操作,可以发现以下规律:
- 奇数 ^ 奇数 = 0
- 偶数 ^ 偶数 = 0
- 奇数 ^ 偶数 = 1
- 偶数 ^ 奇数 = 1
这与我们需要的结果是相符的。在国际象棋棋盘中,对于坐标`a1`,`a`代表列,是0(因为我们使用`'a' - 'a'`来表示),`1`代表行,是0(因为我们使用`'1' - '1'`来表示)。0^0=0代表黑色。
让我们使用异或来重写这个问题:
C:
#include <stdbool.h>bool squareIsWhite(char* coordinates) {int row = coordinates[0] - 'a'; // 将字母转换为0到7的数字int col = coordinates[1] - '1'; // 将字符数字转换为0到7的数字return row ^ col; // 使用异或操作
}int main() {char coordinates[] = "a1";if (squareIsWhite(coordinates)) {printf("True\n");} else {printf("False\n");}return 0;
}
C++
#include <iostream>
using namespace std;bool squareIsWhite(string coordinates) {int row = coordinates[0] - 'a'; // 将字母转换为0到7的数字int col = coordinates[1] - '1'; // 将字符数字转换为0到7的数字return row ^ col; // 使用异或操作
}int main() {string coordinates = "a1";if (squareIsWhite(coordinates)) {cout << "True" << endl;} else {cout << "False" << endl;}return 0;
}
此方法更为简洁,并且直观地使用了异或运算的特性。当然,对于这种基础问题,可以有多种实现方法,每种方法都有其特点和优点。
总结:
这道题目给我逐步入门算法作了很好的引导,刚开始是我由于对字符串性质的不了解所以虽然想到转换但不知道怎么转换暴露了我C语言和C++的字符串方面的不足,然后就是我也没想到用减法求出他们x和y分别到原点的距离。
主要暴露了以下几点:
-
基本编程知识:对于字符串和字符在C/C++中的操作方法,如字符与ASCII值之间的转换,对于初学者来说,这是一个重要的知识点。但这只是一开始,您会逐渐熟悉这些基础知识,并掌握更多技巧。
-
算法思维:算法不仅仅是解决问题的方法,更是一种问题解决的思维方式。通过这道题,您可能意识到了自己在如何高效地看待问题和选择解决方案上的不足。这需要时间和实践来锻炼。
-
空间思维:处理坐标、距离等涉及空间思维的问题时,能够直观地理解并将其转化为算法是一项宝贵的能力。但这也是可以通过练习来提高的。
-
抽象能力:将问题抽象成数学模型或简化的逻辑结构是算法设计中的关键步骤。您可能需要在这方面进行更多的练习,例如,如何将象棋棋盘抽象为一个二维数组或坐标系统。
-
问题分析与定位:当面对一个问题时,首先要学会如何分析问题,找出问题的关键点,然后有针对性地解决。例如,在这个问题中,关键是如何根据坐标确定格子的颜色。
但我相信,这并不意味着我的能力有任何固有的不足。编程和算法设计是技能,需要时间和实践来培养。每个人在学习的过程中都会遇到挑战,但正是这些挑战帮助我们成长和进步。
相关文章:

Leetcode 1812。判断国际象棋棋盘中一个格子的颜色
国际棋盘问题: 给你一个坐标 coordinates ,它是一个字符串,表示国际象棋棋盘中一个格子的坐标。下图是国际象棋棋盘示意图。 如果所给格子的颜色是白色,请你返回 true,如果是黑色,请返回 false 。 给定坐标…...

9个python自动化脚本,PPT批量生成缩略图、添加图片、重命名
引言 最近一番在整理资料,之前买的PPT资源很大很多,但归类并不好,于是一番准备把这些PPT资源重新整理一下。统计了下,这些PPT资源大概有2000多个,一共30多G,一个一个手动整理这个投入产出比也太低了。 作为…...

计算机竞赛 基于大数据的社交平台数据爬虫舆情分析可视化系统
文章目录 0 前言1 课题背景2 实现效果**实现功能****可视化统计****web模块界面展示**3 LDA模型 4 情感分析方法**预处理**特征提取特征选择分类器选择实验 5 部分核心代码6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于大数据…...

基于Java的旅游信息推荐系统设计与实现,springboot+vue,MySQL数据库,前后端分离,完美运行,有三万字论文。
基于Java的旅游信息推荐系统设计与实现,springbootvue,MySQL数据库,前后端分离,完美运行,有三万字论文。 前台主要功能:登录注册、旅游新闻、景区信息、美食信息、旅游线路、现在留言、收藏、预定旅游线路…...

合宙Air724UG LuatOS-Air LVGL API控件--曲线 (Arc)
曲线 (Arc) 曲线控件,也可以称为弧。因为 Arc 本身就是弧,弧形的意思。根据控件的样子也能推测出它的使用场景,一般用在加载器(就是等待界面转的圈圈)或者数值显示,数值调节这些场景。曲线控件分了两个部分,前景和背…...

09-微信小程序 网络请求API(实现轮播广告和简易的聊天窗口)
09-微信小程序API网络请求(实现轮播广告和简易的聊天窗口) 文章目录 微信小程序API服务器域名配置注意网络相关APIrequestRequestTask 请求任务对象object.success 回调函数object.fail 回调函数案例代码(实现轮播图) WebSocket案例代码(实现…...

Visual Studio 2017安装和项目配置
目录 前言1. What、Why and How1.1 What1.2 Why1.3 How 2. 安装3. 创建新项目4. 配置OpenCV库4.1 下载opencv安装包4.2 配置系统环境变量4.3 VS项目环境配置4.4 总结 5. 已有项目添加6. Tips6.1 常用快捷键6.2 字体和颜色选择6.3 配置编译路径 结语下载链接参考 前言 最近因为项…...

【提升接口响应能力的最佳实践】常规操作篇
文章目录 1. 并行处理简要说明CompletableFuture是银弹吗?测试案例测试结论半异步,半同步总结 2. 最小化事务范围简要说明编程式事务模板 3. 缓存简要说明 4. 合理使用线程池简要说明使用场景线程池的创建参数的配置建议 线程池的监控线程池的资源隔离 5…...
Vue使用ffmpeg,报ReferenceError: SharedArrayBuffer is not defined 如何解决
“SharedArrayBuffer is not defined” 错误是因为在浏览器环境中,SharedArrayBuffer 对象被认为是一种潜在的安全风险。为了防止 Spectre 攻击等漏洞,现代浏览器通常会禁用或限制对 SharedArrayBuffer 的使用。 SharedArrayBuffer 是一种 JavaScript 对…...
【OpenCV实战】1.OpenCV环境搭建,Mac M1系统,C++开发环境
OpenCV环境搭建,Mac系统,C开发环境 一、步骤VSCode C环境安装运行CMake安装运行OpenCV 安装CMakeList 一、步骤 VSCode C环境安装CMake 安装OpenCV 安装CmakeList.txt VSCode C环境安装运行 访问官网 CMake安装运行 CMake官网 参考文档 OpenCV 安…...

Hyperf 如何做到用两个端口 9501/9502 都能连接 Websocket 服务以及多 Worker 协作实现聊天室功能
为何 Hyperf 能够在两个端口上监听 WebSocket 连接? 源码角度来看,在配置了多个 Servers 时,实际上,只启动了一个 Server 注:我之前接触的代码都是启动一个服务绑定一个端口,之前也看过 swoole 扩展的文档…...

网络映射会遇到哪些困难
网络映射通过将复杂的网络划分为更小、可管理的块,帮助 IT 管理员获得对其网络的更大控制和可见性,它有助于可视化不同的网络组件(如服务器、交换机端口和路由器)如何互连以执行其功能,通过表示网络设备的通信方式&…...
【jvm】类的主动使用和被动使用
目录 一、主动使用二、被动使用 一、主动使用 1.创建类的实例 2.访问某个类或接口的静态变量,或者对该静态变量赋值 3.调用类的静态方法 4.反射(例如Class.forName(“com.learning.Test”)) 5.初始化一个类的子类 6.java虚拟机启动时被标明为…...

如何选择合适的损失函数
目录 如何选择合适的损失函数 1、均方误差,二次损失,L2损失(Mean Square Error, Quadratic Loss, L2 Loss) 2、平均绝对误差,L1损失(Mean Absolute Error, L1 Loss) 3、MSE vs MAE ÿ…...

Java常见的排序算法
排序分为内部排序和外部排序(外部存储) 常见的七大排序,这些都是内部排序 。 1、插入排序:直接插入排序 1、插入排序:每次将一个待排序的记录,按其关键字的大小插入到前面已排序好的记录序列 中的适当位置…...

【C++】5、构建:CMake
文章目录 一、概述二、实战2.1 内部构建、外部构建2.2 CLion Cmake 一、概述 CMake 是跨平台构建工具,其通过 CMakeLists.txt 描述,并生成 native 编译配置文件: 在 Linux/Unix 平台,生成 makefile在苹果平台,可以生…...

【ARP欺骗】嗅探流量、限速、断网操作
【ARP欺骗】 什么是ARP什么是ARP欺骗ARP欺骗实现ARP断网限制网速嗅探流量 什么是ARP ARP(Address Resolution Protocol,地址解析协议)是一个TCP/IP协议,用于根据IP地址获取物理地址。在计算机网络中,当一个主机需要发…...

初步认识OSPF的大致内容(第三课)
1 路由的分类 直连路由(Directly Connected Route)是指网络拓扑结构中相邻两个网络设备直接相连的路由,也称为直接路由。如果两个设备属于同一IP网络地址,那么它们就是直连设备。直连路由表是指由计算机系统生成的一种用于路由选择的表格,其中记录着直连路由的信息。直连…...

CSDN编程题-每日一练(2023-08-27)
CSDN编程题-每日一练(2023-08-27) 一、题目名称:异或和二、题目名称:生命进化书三、题目名称:熊孩子拜访 一、题目名称:异或和 时间限制:1000ms内存限制:256M 题目描述: …...
机器视觉之平面物体检测
平面物体检测是计算机视觉中的一个重要任务,它通常涉及检测和识别在图像或视频中出现的平面物体,如纸张、标志、屏幕、牌子等。下面是一个使用C和OpenCV进行平面物体检测的简单示例,使用了图像中的矩形轮廓检测方法: #include &l…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...

ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

计算机基础知识解析:从应用到架构的全面拆解
目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...

day36-多路IO复用
一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...
MinIO Docker 部署:仅开放一个端口
MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...