Easy
题目描述
给你两个字符串 coordinate1 和 coordinate2,代表 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'
提示:
- 当行坐标和列坐标的和为偶数时,棋盘方格是黑色的,否则是白色的。
解题思路
解题思路
这道题要求判断两个棋盘方格是否颜色相同。关键在于理解棋盘的颜色规律。
从题目提示可知:当行坐标和列坐标的和为偶数时,方格是黑色;为奇数时,方格是白色。
具体步骤:
- 将字母坐标转换为数字(a=1, b=2, …, h=8)
- 计算每个坐标的行列和
- 判断两个和的奇偶性是否相同
有两种实现方式:
- 方法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) | 只使用了几个整型变量存储中间结果 |