1232. 선에 점 넣기 (수학적 직선 문제)

LeetCode : 1232. 한 줄로 점선

여기에 사진 설명 삽입


제공된 아이디어 : 인터뷰 질문 16.14. 최고의 직선 (수학적 벡터 공선)


아이디어 :

  1. 먼저 첫 번째 점을 따라 원점으로 이동하여 직선이 원점을 통과하는 직선이되도록합니다. (직선 일반 방정식 Ax + By + C == 0)
  2. 벡터 공선 성의 방법
    2.1 공선상의 세 점 : 두 점 (x1, y1) (x2, y2)에서 세 번째 점 (x0, y0)을 뺀 경우, x 1 ∗ y 2 = = x 2 ∗ y 1 x1 * y2 = = x2 * y1x 1y 2==x 2y 1 은 동일 선상에있는 세 점입니다.


AC 코드 직선 일반 방정식

class Solution {
    
    
    public boolean checkStraightLine(int[][] cd) {
    
    
        // 把直线变成过原点的 -> 查看后面点的 b 是不是为 0, 不是 0 的话就返回 false
        int len = cd.length;
        int a = cd[0][0], b = cd[0][1];
        int x0 = cd[1][0] - a, y0 = cd[1][1] - b;
        // 移动
        for(int i = 2; i < len; i++) {
    
    
            cd[i][0] -= a;
            cd[i][1] -= b;
            // 直线的一般方程: Ax + By + C = 0 >> 过原点 C == 0
            // 然后代入 x0 and y0 --> 得 A = y0, B = -x0
            if(y0 * cd[i][0] + -x0 * cd[i][1] != 0) return false;
        }
        
        return true;
    }
}





AC 코드 벡터 동일 선상 방법

class Solution {
    
    
    public boolean checkStraightLine(int[][] cd) {
    
    
        int len = cd.length;
        int x0 = cd[1][0] - cd[0][0];
        int y0 = cd[1][1] - cd[0][1];
        for(int i = 2; i < len; i++) {
    
    
            int x1 = cd[i][0] - cd[0][0];
            int y1 = cd[i][1] - cd[0][1];
            if(x0 * y1 != y0 * x1) return false;
        }

        return true;
    }
}



추천

출처blog.csdn.net/qq_43765535/article/details/112755317