1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
class Solution {
public:
// DFS 枚举当前第 i 个数放到哪个子集(乘积为 mul1 或 mul2)
bool dfs(std::vector<int>& nums, int i, long long mul1, long long mul2, long long target)
{
if (mul1 > target || mul2 > target) {
return false; // 剪枝:乘积已经超过目标
}
if (i == nums.size()) {
return mul1 == target && mul2 == target; // 判断是否两个子集都达成目标乘积
}
// 尝试将当前数 nums[i] 加入 mul1 或 mul2 子集中
return dfs(nums, i + 1, mul1 * nums[i], mul2, target) ||
dfs(nums, i + 1, mul1, mul2 * nums[i], target);
}
bool checkEqualPartitions(vector<int>& nums, long long target) {
return dfs(nums, 0, 1, 1, target); // 初始两个子集乘积为 1
}
};
|