checkStraightLine-缀点成线

题意

在一个 XY 坐标系中有一些点,我们用数组 coordinates 来分别记录它们的坐标,其中 coordinates[i] = [x, y] 表示横坐标为
x、纵坐标为 y 的点。

请你来判断,这些点是否在该坐标系中属于同一条直线上,是则返回 true,否则请返回 false。

示例 1:

checkStraightLine-缀点成线_第1张图片

输入:coordinates = [[1,2],[2,3],[3,4],[4,5],[5,6],[6,7]]
输出:true

示例 2:
checkStraightLine-缀点成线_第2张图片

输入:coordinates = [[1,1],[2,2],[3,4],[4,5],[5,6],[7,7]]
输出:false

提示:

2 <= coordinates.length <= 1000
coordinates[i].length == 2
-10^4 <= coordinates[i][0], coordinates[i][1] <= 10^4
coordinates 中不含重复的点

Related Topics 几何 数组 数学

解题思路

较为简单,直接代码演示

代码演示:

class Solution {
    public boolean checkStraightLine(int[][] coordinates) {
            if(coordinates.length==2)
                return true;
            //判断所求线是否垂直于x轴
           if(coordinates[1][0]==coordinates[0][0])
           {
               for (int i = 2; i < coordinates.length; i++) {
                   if(coordinates[i][0]!=coordinates[0][0])
                       return false;
               }
           }
           else
           {
               //求直线的斜率,如果两点的斜率一致,则可以保证在同一条直线上
               double a=(coordinates[1][1]-coordinates[0][1])*1.0/(coordinates[1][0]-coordinates[0][0]);
               for (int i = 2; i < coordinates.length; i++) {
                   double b = (coordinates[i][1] - coordinates[0][1])*1.0 / (coordinates[i][0] - coordinates[0][0]);
                   if(a!=b)
                       return false;
               }
           }

        return true;
    }
}

运行效果

info
解答成功:
执行耗时:0 ms,击败了100.00% 的Java用户
内存消耗:37.9 MB,击败了82.88% 的Java用户

你可能感兴趣的:(算法,java)