Easy

题目描述

给你两个字符串 coordinate1coordinate2,代表 8 x 8 棋盘上一个方格的坐标。

下面是棋盘供参考。

如果这两个方格颜色相同,返回 true,否则返回 false

坐标将始终表示有效的棋盘方格。坐标将始终先有字母(表示列),再有数字(表示行)。

示例 1:

输入:coordinate1 = "a1", coordinate2 = "c3"
输出:true
解释:两个方格都是黑色的。

示例 2:

输入:coordinate1 = "a1", coordinate2 = "h3"
输出:false
解释:方格 "a1" 是黑色的,而 "h3" 是白色的。

约束条件:

  • coordinate1.length == coordinate2.length == 2
  • 'a' <= coordinate1[0], coordinate2[0] <= 'h'
  • '1' <= coordinate1[1], coordinate2[1] <= '8'

提示:

  • 当行坐标和列坐标的和为偶数时,棋盘方格是黑色的,否则是白色的。

解题思路

解题思路

这道题要求判断两个棋盘方格是否颜色相同。关键在于理解棋盘的颜色规律。

从题目提示可知:当行坐标和列坐标的和为偶数时,方格是黑色;为奇数时,方格是白色。

具体步骤:

  1. 将字母坐标转换为数字(a=1, b=2, …, h=8)
  2. 计算每个坐标的行列和
  3. 判断两个和的奇偶性是否相同

有两种实现方式:

  • 方法1(推荐):直接计算奇偶性,比较两个坐标的 (列+行) % 2 是否相等
  • 方法2:先计算具体的和,再判断奇偶性

推荐方法1,因为我们只关心奇偶性,不需要计算具体数值,代码更简洁高效。

注意:字符 ‘a’ 对应数值1,数字字符 ‘1’ 对应数值1,所以转换公式为:

  • 列坐标:coordinate[0] - 'a' + 1
  • 行坐标:coordinate[1] - '0'

代码实现

class Solution {
public:
    bool checkTwoChessboards(string coordinate1, string coordinate2) {
        // 计算两个坐标的奇偶性
        int sum1 = (coordinate1[0] - 'a' + 1) + (coordinate1[1] - '0');
        int sum2 = (coordinate2[0] - 'a' + 1) + (coordinate2[1] - '0');
        
        // 判断奇偶性是否相同
        return sum1 % 2 == sum2 % 2;
    }
};
class Solution:
    def checkTwoChessboards(self, coordinate1: str, coordinate2: str) -> bool:
        # 计算两个坐标的奇偶性
        sum1 = (ord(coordinate1[0]) - ord('a') + 1) + int(coordinate1[1])
        sum2 = (ord(coordinate2[0]) - ord('a') + 1) + int(coordinate2[1])
        
        # 判断奇偶性是否相同
        return sum1 % 2 == sum2 % 2
public class Solution {
    public bool CheckTwoChessboards(string coordinate1, string coordinate2) {
        // 计算两个坐标的奇偶性
        int sum1 = (coordinate1[0] - 'a' + 1) + (coordinate1[1] - '0');
        int sum2 = (coordinate2[0] - 'a' + 1) + (coordinate2[1] - '0');
        
        // 判断奇偶性是否相同
        return sum1 % 2 == sum2 % 2;
    }
}
/**
 * @param {string} coordinate1
 * @param {string} coordinate2
 * @return {boolean}
 */
var checkTwoChessboards = function(coordinate1, coordinate2) {
    const getColor = (coord) => {
        const col = coord.charCodeAt(0) - 'a'.charCodeAt(0);
        const row = parseInt(coord[1]) - 1;
        return (col + row) % 2;
    };
    
    return getColor(coordinate1) === getColor(coordinate2);
};

复杂度分析

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

相关题目