刷题的日常-判断国际象棋棋盘中一个格子的颜色

396 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第17天,点击查看活动详情

刷题的日常-2022年12月9号

一天一题,保持脑子清爽

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

来自leetcode的 1812 题,题意如下:

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

image.png

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

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

理解题意

通过题意,我们可以将信息整理如下:

  • 题目给出一个字符串
  • 字符串由两个字符构成
    • 一个是横坐标,一个是纵坐标
  • 要求我们返回给定坐标位置的格子是否是白色

做题思路

其实就是通过坐标判断下颜色即可,这里其实可以先判断横坐标的位置,然后再看下纵坐标的位置。我们可以发现,在 a c e g为横坐标的时候,纵坐标是偶数的时候,格子的颜色就是白色,否则奇数才是白色。这里采取第二种方式进行实现。

方式二

我们知道字符其实是一种计算机的编码,所以像字母 a b c d 其实可以用一个int值去表示,并且在编码中,a - z的字符编码是连续的,比如说 a 的ascii编码是 97,而 b 字符则用 98 表示。知道了这一点,然后我们再观察一下棋盘的规则,如果 a 代表 0 的话,那么当和纵坐标相加的和为偶数时,代表的格子为白色。因此我们可以将 横坐标转换为 int 值再去做计算,然后和横坐标相加之后,和 2 相除取模即可。

代码实现

代码实现如下:

public class Solution {
    public boolean squareIsWhite(String coordinates) {
        return (coordinates.charAt(0) + coordinates.charAt(1) - 145) % 2 == 0;
    }
}

image.png