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…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...

Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...

【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...

SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...

华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...