一、题目
给你两个字符串 coordinate1 和 coordinate2,代表 8 x 8 国际象棋棋盘上的两个方格的坐标。以下是棋盘格的参考图:
如果这两个方格颜色相同,返回 true,否则返回 false。坐标总是表示有效的棋盘方格。坐标的格式总是先字母(表示列),再数字(表示行)。
示例:
输入:
coordinate1 = “a1”, coordinate2 = “c3”
输出:
true
二、题解
思路:
通过观察发现处于黑格的坐标,无论是横坐标还是纵坐标,奇偶性是相同的,就比如a1,横坐标a换算成ascll为97是奇数,纵坐标1也是奇数。反之奇偶性不同则是白块。
自写代码:
class Solution {
public boolean checkTwoChessboards(String coordinate1, String coordinate2) {
char m1 = coordinate1.charAt(0);
char m2 = coordinate1.charAt(1);
char n1 = coordinate2.charAt(0);
char n2 = coordinate2.charAt(1);
int asc1 = (int) m1;
int asc2 = (int) n1;
//1黑
if(asc1 % 2 == m2 % 2){
if(asc2 % 2 == n2 % 2){//2黑
return true;
}else {//2白
return false;
}
}else {//1白
if(asc2 % 2 == n2 % 2){//2黑
return false;
}else {
return true;
}
}
}
}
三、官方题解
思路:
由于棋盘上的黑白格是间隔排列的,因此:
当行数变化 1 时,格子的颜色会发生变化;
当列数变化 1 时,格子的颜色会发生变化。
因此,如果两个格子之间行数的差值,与列数的差值,二者的和为偶数,说明它们的颜色相同,否则颜色不同。记两个格子分别是 c 1和 c 2,也就是:
( c 1 [ 0 ] − c 2 [ 0 ] ) + ( c 1 [ 1 ] − c 2 [ 1 ] ) (c 1[0] - c 2[0]) + (c 1[1] - c 2[1]) (c1[0]−c2[0])+(c1[1]−c2[1])
为偶数即可。
代码:
class Solution {
public boolean checkTwoChessboards(String coordinate1, String coordinate2) {
return (coordinate1.charAt(0) - coordinate2.charAt(0) + coordinate1.charAt(1) - coordinate2.charAt(1)) % 2 == 0;
}
}
四、总结
1、关于解题思路上,已经想到了奇偶性的问题,但是没有细想,动手写代码时写感觉到了代码的繁杂,也没有停止纠正思路,这点需要改进。
2、关于java基础,对java不熟悉,基础有待补充强化。