1232. Check If It Is a Straight Line

You are given an array coordinates, coordinates[i] = [x, y], where [x, y] represents the coordinate of a point. Check if these points make a straight line in the XY plane.

 

 

Example 1:

Input: coordinates = [[1,2],[2,3],[3,4],[4,5],[5,6],[6,7]]
Output: true

Example 2:

Input: coordinates = [[1,1],[2,2],[3,4],[4,5],[5,6],[7,7]]
Output: false

 

Constraints:

  • 2 <= coordinates.length <= 1000
  • coordinates[i].length == 2
  • -10^4 <= coordinates[i][0], coordinates[i][1] <= 10^4
  • coordinates contains no duplicate point.

Rust Solution

struct Solution;

impl Solution {
    fn check_straight_line(coordinates: Vec<Vec<i32>>) -> bool {
        let n = coordinates.len();
        if n == 2 {
            return true;
        }
        let x1 = coordinates[1][0] - coordinates[0][0];
        let y1 = coordinates[1][1] - coordinates[0][1];
        for i in 1..n {
            let xi = coordinates[i][0] - coordinates[0][0];
            let yi = coordinates[i][1] - coordinates[0][1];
            if x1 * yi != xi * y1 {
                return false;
            }
        }
        true
    }
}

#[test]
fn test() {
    let coordinates: Vec<Vec<i32>> = vec_vec_i32![[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [6, 7]];
    assert_eq!(Solution::check_straight_line(coordinates), true);
    let coordinates: Vec<Vec<i32>> = vec_vec_i32![[1, 1], [2, 2], [3, 4], [4, 5], [5, 6], [7, 7]];
    assert_eq!(Solution::check_straight_line(coordinates), false);
}

Having problems with this solution? Click here to submit an issue on github.