- Leetcode 3566. Partition Array into Two Equal Product Subsets
- 1. 解题思路
- 2. 代码实现
- 题目链接:3566. Partition Array into Two Equal Product Subsets
1. 解题思路
这一题我的实现还是比较暴力的,首先显而易见的,若要满足题目要求,则给出的数组的所有元素的乘积必然是target的平方,因此,我们可以快速由此判断该数组是否可分。
然后,在满足上述条件的前提下,我们就是要找到若干个元素使之乘积恰好为target,这个的话我们可以通过一个动态规划进行实现。
2. 代码实现
给出python代码实现如下:
class Solution:
def checkEqualPartitions(self, nums: List[int], target: int) -> bool:
prod = 1
for num in nums:
prod *= num
if prod != target * target:
return False
n = len(nums)
@lru_cache(None)
def dp(idx, tgt):
if tgt == 1:
return True
if idx >= n:
return False
if tgt % nums[idx] == 0:
return dp(idx+1, tgt) or dp(idx+1, tgt // nums[idx])
else:
return dp(idx+1, tgt)
return dp(0, target)
提交代码评测得到:耗时7ms,占用内存18.5MB。