Untitled

 avatar
unknown
plain_text
2 years ago
1.3 kB
6
Indexable
class Solution {
public:
    bool solve(int i, vector<int>&nums, vector<pair<vector<int>, int>> &partitions){
        if (i == nums.size()){
            if (partitions.size() == 2 && partitions[0].second == partitions[1].second){
                return true; 
            }
            return false; 
        }
        // each element has the option to join previous paritions or start its own subset
        int currelem = nums[i];
        for (int ii = 0; ii<partitions.size(); ii++){
            partitions[ii].first.push_back(currelem);
            partitions[ii].second += currelem; 
            if (solve(i + 1, nums, partitions) == true){
                return true; 
            };
            partitions[ii].first.pop_back();
            partitions[ii].second -= currelem; 
        }
        if (partitions.size() < 2){
            vector<int> temp; 
            temp.push_back(currelem);
            partitions.push_back(make_pair(temp, currelem));
            if (solve(i + 1, nums, partitions) == true){
                return true; 
            }
            partitions.pop_back(); 
        }
        return false; 


    }


    bool canPartition(vector<int>& nums) {
        vector<pair<vector<int>, int>> partitions; 
        return solve(0, nums, partitions);
    }
};
Editor is loading...