Easy

题目描述

给你一个坐标 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'

解题思路

这道题的关键是理解国际象棋棋盘的颜色规律。

思路分析:

国际象棋棋盘是一个 8×8 的方格,黑白相间。我们可以观察到一个重要的规律:

  • 将坐标转换为数字坐标,例如 “a1” 对应 (1,1),“h3” 对应 (8,3)
  • 如果横坐标和纵坐标的和为奇数,则该格子为黑色
  • 如果横坐标和纵坐标的和为偶数,则该格子为白色

具体转换方法:

  1. 字母转数字:‘a’→1, ‘b’→2, …, ‘h’→8
  2. 数字字符转数字:‘1’→1, ‘2’→2, …, ‘8’→8
  3. 计算坐标和的奇偶性

解法选择:

  • 方法一(推荐):直接计算坐标和的奇偶性
  • 方法二:构建坐标到颜色的映射表(空间复杂度较高)

核心观察:在标准的国际象棋棋盘中,左下角 “a1” 是黑色格子,这符合我们的规律(1+1=2,偶数对应黑色,但题目要求白色返回true,所以偶数返回false)。

代码实现

class Solution {
public:
    bool squareIsWhite(string coordinates) {
        int x = coordinates[0] - 'a' + 1;
        int y = coordinates[1] - '0';
        return (x + y) % 2 == 1;
    }
};
class Solution:
    def squareIsWhite(self, coordinates: str) -> bool:
        x = ord(coordinates[0]) - ord('a') + 1
        y = int(coordinates[1])
        return (x + y) % 2 == 1
public class Solution {
    public bool SquareIsWhite(string coordinates) {
        int x = coordinates[0] - 'a' + 1;
        int y = coordinates[1] - '0';
        return (x + y) % 2 == 1;
    }
}
/**
 * @param {string} coordinates
 * @return {boolean}
 */
var squareIsWhite = function(coordinates) {
    const col = coordinates.charCodeAt(0) - 97;
    const row = parseInt(coordinates[1]) - 1;
    return (col + row) % 2 === 1;
};

复杂度分析

复杂度类型说明
时间复杂度O(1)只需要常数时间的字符转换和算术运算
空间复杂度O(1)只使用了常数个变量存储坐标值

相关题目