算法练习——缀点成线

2021年1月17日LeetCode每日一题1232. 缀点成线,这一道题使用数学法解决,一元一次直线方程,设这个方程为Ax+By=0,然后将所有的平移一下,将第一个点归为原点方便计算方程的A、B值,然后将剩余的点代入计算,结果为0则这个点在线上。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution {
public boolean checkStraightLine(int[][] coordinates) {
int deltaX = coordinates[0][0], deltaY = coordinates[0][1];
int n = coordinates.length;
for (int i = 0; i < n; i++) {
coordinates[i][0] -= deltaX;
coordinates[i][1] -= deltaY;
}
int A = coordinates[1][1], B = -coordinates[1][0];
for (int i = 2; i < n; i++) {
int x = coordinates[i][0], y = coordinates[i][1];
if (A * x + B * y != 0) {
return false;
}
}
return true;
}
}

今天的题目是一道简单的数学问题,要求用程序将其求解出来,关键问题在于将点归位到以原点为中心的直线方程就很容易计算了。