#1039

Minimum Score Triangulation of Polygon

Medium
ArrayDynamic ProgrammingDynamic ProgrammingRecursion
LeetCode ↗

Approaches

Brute ForceOptimal
Complexity Comparison
Brute ForceOptimal Solution
Time
O(n²)
O(n³)
Space
O(1)
O(n²)
💡

Intuition

Time O(n³)Space O(n²)

The optimal solution uses dynamic programming to build up solutions to subproblems, storing results to avoid redundant calculations. This significantly reduces the number of computations needed compared to brute force.

⚙️

Algorithm

3 steps
  1. 1Step 1: Create a DP table where dp[i][j] represents the minimum score to triangulate the polygon from vertex i to vertex j.
  2. 2Step 2: Iterate over the lengths of the segments and fill the DP table using previously computed values.
  3. 3Step 3: Return dp[0][n-1] which contains the minimum score for the entire polygon.
solution.py14 lines
1# Full working Python code
2
3def minScoreTriangulation(values):
4    n = len(values)
5    dp = [[0] * n for _ in range(n)]
6    for length in range(2, n):
7        for i in range(n - length):
8            j = i + length
9            dp[i][j] = float('inf')
10            for k in range(i + 1, j):
11                score = values[i] * values[k] * values[j] + dp[i][k] + dp[k][j]
12                dp[i][j] = min(dp[i][j], score)
13    return dp[0][n - 1]
14

Complexity note: The time complexity is O(n³) due to the nested loops iterating over the vertices and the pairs of vertices being considered for triangulation. The space complexity is O(n²) because we maintain a DP table of size n x n.

  • 1Dynamic programming helps break down the problem into smaller, manageable subproblems.
  • 2Storing intermediate results prevents redundant calculations, making the solution efficient.

Solutions and explanations are original Tejav content. Problem titles © LeetCode — use the LeetCode button above for the full problem statement.