美文网首页图解LeetCode算法
图解LeetCode——1812. 判断国际象棋棋盘中一个格子的

图解LeetCode——1812. 判断国际象棋棋盘中一个格子的

作者: 爪哇缪斯 | 来源:发表于2022-12-07 09:36 被阅读0次

    一、题目

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

    如果所给格子的颜色是白色,请你返回 true,如果是黑色,请返回 false

    给定坐标一定代表国际象棋棋盘上一个存在的格子。坐标第一个字符是字母,第二个字符是数字。

    二、示例

    2.1> 示例 1:

    【输入】coordinates = "a1"
    【输出】false
    【解释】如上图棋盘所示,"a1" 坐标的格子是黑色的,所以返回 false 。

    2.2> 示例 2:

    【输入】coordinates = "h3"
    【输出】true
    【解释】如上图棋盘所示,"h3" 坐标的格子是白色的,所以返回 true 。

    2.3> 示例 3:

    【输入】coordinates = "c7"
    【输出】false

    提示:

    • coordinates.length == 2
    • 'a' <= coordinates[0] <= 'h'
    • '1' <= coordinates[1] <= '8'

    三、解题思路

    3.1> 采用异或方式

    首先:针对题目中的棋盘,我们可以针对 ,做出如下假设性的拆分操作:

    棋盘中列的假设】:a列白色、b列黑色、c列白色、d列黑色……
    棋盘中行的假设】:1行黑色、2行白色、3行黑色、4行白色……

    然后,我们再观察棋盘中的格子,发现如下规律:

    规律1:白色 + 黑色 = 黑色
    a1为例,此格子是黑色的,由于这个格子是由a列+1行组成,即:a列(白色) + 1行(黑色) = a1(黑色)
    规律2:白色 + 白色 = 白色
    a2为例,此格子是白色的,由于这个格子是由a列+2行组成,即:a列(白色) + 2行(白色) = a2(白色)
    规律3:黑色 + 黑色 = 白色
    b1为例,此格子是白色的,由于这个格子是由b列+1行组成,即:b列(黑色) + 1行(黑色) = b1(白色)

    最后,我们发现这种规律与 异或操作 是一样的,即:白色用0表示,黑色用1表示

    规律1:白色 + 黑色 = 黑色】0^1等于1
    规律2:白色 + 白色 = 白色】0^0等于0
    规律3:黑色 + 黑色 = 白色】1^1等于0

    所以,我们只需要将coordinates指定的行和列转换为0或1,然后计算异或即可。

    3.2> 采用奇偶方式

    我们以a1格子为例,a的ASCII码为97,1的ASCII码为49,那么ASCII(a) + ASCII(1) = 97 + 49 = 146,那么当总和是偶数时,则格子是黑色;如果总和是奇数时,则格子是白色

    此处就不再画图赘述了。

    四、代码实现

    4.1> 采用异或方式

    class Solution {
        public boolean squareIsWhite(String coordinates) { // 白色用0表示,黑色用1表示
            int letter = (coordinates.charAt(0) - 'a') % 2;     // a列:白色 b列:黑色 c列:白色 ……
            int number = (coordinates.charAt(1) - '1' + 1) % 2; // 1行:黑色 2行:白色 3行:黑色 ……
            return (letter ^ number) == 0; 
        }
    }
    

    4.2> 采用奇偶方式

    class Solution {
        public boolean squareIsWhite(String coordinates) {
            return (coordinates.charAt(0) + coordinates.charAt(1)) % 2 == 1; // 白色用奇数表示,黑色用偶数表示
        }
    }
    

    今天的文章内容就这些了:

    写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的 点赞 & 分享

    更多技术干货,欢迎大家关注公众号“爪哇缪斯” ~ \(o)/ ~ 「干货分享,每天更新」

    相关文章

      网友评论

        本文标题:图解LeetCode——1812. 判断国际象棋棋盘中一个格子的

        本文链接:https://www.haomeiwen.com/subject/lfrnfdtx.html