Leetcode 1812。判断国际象棋棋盘中一个格子的颜色

这篇具有很好参考价值的文章主要介绍了Leetcode 1812。判断国际象棋棋盘中一个格子的颜色。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Leetcode 1812。判断国际象棋棋盘中一个格子的颜色,【Letcode】每日一题,leetcode,算法

国际棋盘问题:

给你一个坐标 coordinates ,它是一个字符串,表示国际象棋棋盘中一个格子的坐标。下图是国际象棋棋盘示意图。

Leetcode 1812。判断国际象棋棋盘中一个格子的颜色,【Letcode】每日一题,leetcode,算法

如果所给格子的颜色是白色,请你返回 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.坐标字符顺序 字母 数字

二、分析

所有的条件都是为了一个目的:就是输入坐标然后输出颜色

那么如何实现这个操作呢?

三、步骤

Leetcode 1812。判断国际象棋棋盘中一个格子的颜色,【Letcode】每日一题,leetcode,算法

 其实步骤很简单就分为两步,但是实现原理我有两种思路,第一种数学归纳法 就是通过数学规律求出规律然后求解 第二种 模拟 模拟有分两种通过二进制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分别到原点的距离。

主要暴露了以下几点:

  1. 基本编程知识:对于字符串和字符在C/C++中的操作方法,如字符与ASCII值之间的转换,对于初学者来说,这是一个重要的知识点。但这只是一开始,您会逐渐熟悉这些基础知识,并掌握更多技巧。

  2. 算法思维:算法不仅仅是解决问题的方法,更是一种问题解决的思维方式。通过这道题,您可能意识到了自己在如何高效地看待问题和选择解决方案上的不足。这需要时间和实践来锻炼。

  3. 空间思维:处理坐标、距离等涉及空间思维的问题时,能够直观地理解并将其转化为算法是一项宝贵的能力。但这也是可以通过练习来提高的。

  4. 抽象能力:将问题抽象成数学模型或简化的逻辑结构是算法设计中的关键步骤。您可能需要在这方面进行更多的练习,例如,如何将象棋棋盘抽象为一个二维数组或坐标系统。

  5. 问题分析与定位:当面对一个问题时,首先要学会如何分析问题,找出问题的关键点,然后有针对性地解决。例如,在这个问题中,关键是如何根据坐标确定格子的颜色。

但我相信,这并不意味着我的能力有任何固有的不足。编程和算法设计是技能,需要时间和实践来培养。每个人在学习的过程中都会遇到挑战,但正是这些挑战帮助我们成长和进步。

Leetcode 1812。判断国际象棋棋盘中一个格子的颜色,【Letcode】每日一题,leetcode,算法文章来源地址https://www.toymoban.com/news/detail-675667.html

到了这里,关于Leetcode 1812。判断国际象棋棋盘中一个格子的颜色的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 从0开始写中国象棋-创建棋盘与棋子

    考虑到象棋程序,其实就是数据结构与算法实现。 所以和界面相关的QT部分我们先放一放。 我们从控制台版本开始。这样大家更容易接受,也不影响开发。 后面我们会把控制台嫁接到QT上完成完整的游戏,那时候自然就水到渠成了。 中国象棋的棋盘是一个宽9列,长 5+5 = 10

    2024年02月07日
    浏览(37)
  • leetcode688. 骑士在棋盘上的概率(java)

    来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/knight-probability-in-chessboard 在一个 n x n 的国际象棋棋盘上,一个骑士从单元格 (row, column) 开始,并尝试进行 k 次移动。行和列是 从 0 开始 的,所以左上单元格是 (0,0) ,右下单元格是 (n - 1, n - 1) 。 象棋骑士有8种可能的走法,

    2024年02月08日
    浏览(31)
  • 金庆培:世界需要有一个国际易货贸易协定

    2024年2月4日,我拜访了中国金融与证券行业的著名专家徐士敏教授。 首先开言,他就告诉我:“你金老师,是研究中国自由贸易区创新发展和世界自由贸易区创新发展的专家,我认为,在当前世界经济形势下,世界自由贸易需要有一个世界易货贸易协定,来规范和推动世界自

    2024年02月19日
    浏览(26)
  • leetcode:判断子序列

    easy 给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如, \\\"ace\\\" 是 \\\"abcde\\\" 的一个子序列,而 \\\"aec\\\" 不是)。 进阶: 如果有大量输入的 S,称作 S1, S2, … , Sk 其中

    2024年02月12日
    浏览(32)
  • 【LeetCode】392. 判断子序列 - 双指针

    392. 判断子序列 官方的双指针解法比我写的优秀啊

    2024年02月11日
    浏览(32)
  • leetcode 234.判断链表是否为回文

    给定一个单链表,判断它是否是回文。 输入: 1-2 输出: false 输入: 1-2-2-1 输出: true 判断链表是否为回文,可以通过翻转链表后半部分并比较两半部分是否相同来实现。具体步骤如下: 使用快慢指针找到链表的中间节点。 翻转链表的后半部分。 比较前半部分和翻转后的后半部

    2024年01月19日
    浏览(35)
  • LeetCode 2236. 判断根结点是否等于子结点之和

    力扣题目链接:https://leetcode.cn/problems/root-equals-sum-of-children/ 给你一个 二叉树 的根结点  root ,该二叉树由恰好  3  个结点组成:根结点、左子结点和右子结点。 如果根结点值等于两个子结点值之和,返回  true  ,否则返回   false 。   示例 1: 示例 2:   提示: 树只包含

    2024年02月12日
    浏览(38)
  • 2023-05-17 LeetCode每日一题(判断两个事件是否存在冲突)

    点击跳转到题目位置 给你两个字符串数组 event1 和 event2 ,表示发生在同一天的两个闭区间时间段事件,其中: event1 = [startTime1, endTime1] 且 event2 = [startTime2, endTime2] 事件的时间为有效的 24 小时制且按 HH:MM 格式给出。 当两个事件存在某个非空的交集时(即,某些时刻是两个事

    2024年02月05日
    浏览(54)
  • 每日一题:LeetCode-LCR 143.子结构判断

    前言: 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈    🔎🔎如果说代码有灵魂,那么它的灵魂一定是👉👉 算法 👈👈,因此,想要写出💚优美的程序💚,核心算法是必不可少的,少年,你渴望力量吗😆😆,想掌握程序的灵魂吗❓❗️那么就必须踏上这样一条漫长

    2024年02月05日
    浏览(45)
  • 代码随想录刷题第55天|Leetcode392判断子序列、Leetcode115不同的子序列

    1、Leetcode392判断子序列 题目链接:392判断子序列 本题与1143最长公共子序列 有一点不一样,最长公共子序列求 两个字符串 的最长公共子序列的长度,本题判断s是否为t的子序列。即t的长度是大于等于s的。 1、确定dp数组及下标含义 dp[i][j] 表示以下标i-1为结尾的字符串s,和以

    2024年02月16日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包