leetcode——integer break(343)

    技术2022-07-10  153

    # -*- encoding: utf-8 -*- """ Given a positive integer n, break it into the sum of at least two positive integers and maximize the product of those integers. Return the maximum product you can get. Example 1: Input: 2 Output: 1 Explanation: 2 = 1 + 1, 1 × 1 = 1. Example 2: Input: 10 Output: 36 Explanation: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36. Note: You may assume that n is not less than 2 and not larger than 58. """ class Solution: def integerBreak(self, n: int) -> int: if n == 1: return 1 rest = -1 for i in range(1, n): # 1~ (n-1) rest = max(i * (n - i), i * self.integerBreak(n - i), rest) return rest def integerBreak2(self, n: int) -> int: self.memory = [-1] * (n + 1) return self.int_break(n) def int_break(self, n) -> int: if n == 1: return 1 # 从memory数组中拿到已经计算完的 if self.memory[n] != -1: return self.memory[n] rest = -1 for i in range(1, n): rest = max(i * (n - i), i * self.int_break(n - i), rest) self.memory[n] = rest return self.memory[n] def integerBreak3(self, n: int) -> int: # memo[i] 表示将数字i分割(至少分割为2份)后最大的成绩。 memo = [-1] * (n + 1) memo[1] = 1 for i in range(2, n + 1): # 2到n # 求解 memo[i] for j in range(1, i): memo[i] = max(j * (i - j), j * memo[i - j], memo[i]) return memo[n] if __name__ == '__main__': solution = Solution() result = solution.integerBreak3(100) # print(result)
    Processed: 0.017, SQL: 9