LeetCode 2152. Minimum Number of Lines to Cover Points Solution in Java, C++, Python & Go | Explanation + Code

CoderIndeed
0
2152. Minimum Number of Lines to Cover Points

Description

You are given an array points where points[i] = [xi, yi] represents a point on an X-Y plane.

Straight lines are going to be added to the X-Y plane, such that every point is covered by at least one line.

Return the minimum number of straight lines needed to cover all the points.

 

Example 1:

Input: points = [[0,1],[2,3],[4,5],[4,3]]
Output: 2
Explanation: The minimum number of straight lines needed is two. One possible solution is to add:
- One line connecting the point at (0, 1) to the point at (4, 5).
- Another line connecting the point at (2, 3) to the point at (4, 3).

Example 2:

Input: points = [[0,2],[-2,-2],[1,4]]
Output: 1
Explanation: The minimum number of straight lines needed is one. The only solution is to add:
- One line connecting the point at (-2, -2) to the point at (1, 4).

 

Constraints:

  • 1 <= points.length <= 10
  • points[i].length == 2
  • -100 <= xi, yi <= 100
  • All the points are unique.

Solutions

Solution 1

PythonJavaC++Go
class Solution: def minimumLines(self, points: List[List[int]]) -> int: def check(i, j, k): x1, y1 = points[i] x2, y2 = points[j] x3, y3 = points[k] return (x2 - x1) * (y3 - y1) == (x3 - x1) * (y2 - y1) @cache def dfs(state): if state == (1 << n) - 1: return 0 ans = inf for i in range(n): if not (state >> i & 1): for j in range(i + 1, n): nxt = state | 1 << i | 1 << j for k in range(j + 1, n): if not (nxt >> k & 1) and check(i, j, k): nxt |= 1 << k ans = min(ans, dfs(nxt) + 1) if i == n - 1: ans = min(ans, dfs(state | 1 << i) + 1) return ans n = len(points) return dfs(0)(code-box)

Post a Comment

0Comments

Post a Comment (0)

#buttons=(Accept !) #days=(20)

Our website uses cookies to enhance your experience. Check Now
Accept !