LeetCode: 3274. 检查棋盘方格颜色是否相同

在这里插入图片描述

一、题目

  给你两个字符串 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));
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值