用c++改写
时间: 2023-07-01 17:14:56 浏览: 78
好的,这里是用 C++ 改写的代码:
```cpp
#include <vector>
using namespace std;
class Solution {
public:
bool canPartition(vector<int>& nums) {
if (nums.empty()) return false;
int n = nums.size();
int sum = 0;
for (int i = 0; i < n; i++) {
sum += nums[i];
}
if (sum % 4 != 0) return false;
int target = sum / 4;
vector<int> groups(4, 0);
return backtrack(nums, groups, target, 0);
}
bool backtrack(vector<int>& nums, vector<int>& groups, int target, int index) {
int n = nums.size();
if (index == n) {
for (int i = 0; i < 4; i++) {
if (groups[i] != target) {
return false;
}
}
return true;
}
for (int i = 0; i < 4; i++) {
if (groups[i] + nums[index] <= target) {
groups[i] += nums[index];
if (backtrack(nums, groups, target, index + 1)) {
return true;
}
groups[i] -= nums[index];
}
}
return false;
}
};
```
这个实现和 Python 版本非常类似,只是语法有些不同。我们使用了 vector 来代替 Python 中的列表,使用了 for 循环来代替 Python 中的 range 函数,使用了 if 条件语句来代替 Python 中的 if-else 语句,使用了 return 语句来代替 Python 中的 return 语句,等等。
需要注意的是,在 backtrack 函数中,我们使用了一个 for 循环来遍历 4 个分组,而不是像 Python 中那样使用了 range(4) 函数。这是因为 C++ 中的数组下标是从 0 开始的,因此需要使用 0、1、2、3 来表示 4 个分组。
阅读全文