一、题目
给你两个字符串 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’
三、思路
把 coordinate1 和 coordinate2 简记为 s 和 t。
根据题目中的图片,如果 s[0] 和 s[1] 的 ASCII 值的奇偶性相同,那么格子是黑格,否则是白格。
进一步地,由于 奇数 + 奇数 = 偶数,偶数 + 偶数 = 偶数,所以如果 (s[0] + s[1]) mod 2 是偶数,那么格子是黑格;否则 奇数 + 偶数 = 奇数,格子是白格。
如果 (s[0] + s[1]) mod 2 = (t[0] + t[1]) mod 2,那么两个格子颜色相同,否则不同。
四、解法
package com.example.demo.test;
public class CheckTwoChessboards {
public boolean checkTwoChessboards(String coordinate1, String coordinate2) {
// 查找差值
int dif1 = coordinate2.charAt(0) - coordinate1.charAt(0);
int dif2 = coordinate2.charAt(1) - coordinate1.charAt(1);
return (dif1 & 1) == (dif2 & 1);
}
public static boolean checkTwoChessboards1(String coordinate1, String coordinate2) {
// 查找差值
int dif1 = Math.abs(coordinate2.charAt(0) - coordinate1.charAt(0));
int dif2 = Math.abs(coordinate2.charAt(1) - coordinate1.charAt(1));
// 奇偶性相同
return (dif1 % 2) == (dif2 % 2);
}
public static boolean checkTwoChessboards2(String coordinate1, String coordinate2) {
int dif1 = coordinate1.charAt(0) + coordinate1.charAt(1);
int dif2 = coordinate2.charAt(0) + coordinate2.charAt(1);
// 奇偶性相同
return (dif1 % 2) == (dif2 % 2);
}
public static void main(String[] args) {
String a = "h7";
String b = "c8";
System.out.println(checkTwoChessboards1(a, b));
}
}