写N皇后写的,想出来一个方法。
观察图片可以得到,棋盘上在同一主(副)对角线上的方格颜色相同,且相邻主(副)对角线上的方格颜色不同。因此构建一个数组存放各对角线上方格的颜色。由坐标确定给定方格属于哪个对角线,进而在数组中确定这两个方格的颜色。相同返回true
,不同返回false
即可。三行解决。
class Solution {
public:
bool checkTwoChessboards(string coordinate1, string coordinate2) {
int visco[15]={0,1,0,1,0,1,0,1,0,1,0,1,0,1,0};
//这里用副对角线来解题,主对角线也可以但是还要手动把下标与对角线相对应太麻烦了……。其实这里还可以用for循环,下标对2取余来给这个数组赋值,但是这样又浪费了一些时间,且代码不够简洁。
int x1=coordinate1[0]-'a',y1=coordinate1[1]-'1',x2=coordinate2[0]-'a',y2=coordinate2[1]-'1';
return visco[x1+y1]==visco[x2+y2];
}
};