← All problems

4034. Minimum Bishop Moves to Reach Target

MediumOpen on LeetCodeProblem statement

Problem Statement

4034. Minimum Bishop Moves to Reach Target

Medium


There is an 8 x 8 empty chessboard with 1-indexed rows and columns.

You are given an array source = [sr, sc] representing the starting position of a bishop, and an array target = [tr, tc]. In one move, the bishop travels any number of squares along a single diagonal direction, staying within the board.

Return the minimum number of moves for the bishop to land exactly on target. If it can never reach target, return -1.

 

Example 1:

Input: source = [8,1], target = [1,8]

Output: 1

Explanation:

​​​​​​​

A single diagonal move takes the bishop straight from (8, 1) to (1, 8).

Example 2:

Input: source = [4,2], target = [1,3]

Output: 2

Explanation:

The bishop moves from (4, 2) to (3, 1), then from (3, 1) to (1, 3), reaching the target in 2 moves.

Example 3:

Input: source = [1,1], target = [3,4]

Output: -1

Explanation:

No matter how many diagonal moves it makes, the bishop starting at (1, 1) can never land on (3, 4). Thus, the answer is -1.

 

Constraints:​​​​​​​

Java

Source file
class Solution {
    public int minBishopMoves(int[] source, int[] target) {
        int sr = source[0], sc = source[1], tr = target[0], tc = target[1];
        if ((sr + sc) % 2 != (tr + tc) % 2) // parity mismatch => opp. colored squares
            return -1;
        if (Math.abs(1.0 * (tc - sc) / (tr - sr)) == 1) // slope = n*pi/2 => same diagonal
            return 1;
        return 2;
    }
}