classSolution { public: boolcanPartition(vector<int>::iterator begin, vector<int>::iterator end, int sum){ if (begin == end) returnfalse; if (*begin == sum) returntrue; if (*begin > sum) returnfalse; returncanPartition(begin + 1, end, sum - *begin) || canPartition(begin + 1, end, sum); }
boolcanPartition(vector<int>& nums){ auto it = nums.begin(); int sum = 0; for (; it < nums.end(); it++) sum += *it; if (sum & 1) returnfalse; it = nums.begin(); auto end = nums.end(); returncanPartition(it, end, sum >> 1); } };
classSolution { public: boolcanPartition(vector<int>& nums){ auto it = nums.begin(); int sum = 0; for (; it < nums.end(); it++) sum += *it; if (sum & 1) returnfalse; bool** b = newbool*[nums.size() + 1]; for (int i = 0; i <= nums.size(); i++) { b[i] = newbool[sum / 2 + 1]; }
b[0][0] = true; for (int j = 1; j <= sum / 2; j++) { b[0][j] = false; }
for (int i = 1; i <= nums.size(); i++) { for (int j = 0; j <= sum / 2; j++) b[i][j] = b[i - 1][j];
for (int j = 0; j <= sum / 2; j++) if (b[i - 1][j] && j + nums[i - 1] <= sum / 2) b[i][j + nums[i - 1]] = true;
if (b[i][sum / 2]) returntrue; } returnfalse; } };
Read our privacy policy on how these personalized advertisements are
delivered to you.
For your reading experience, we provide full-text RSS feeds.
Although math formulas cannot be displayed well, the interface can be adjusted as you like
and there are no ads.