Posted on

Description

Submission

class Solution {
public:
    int beautifulSubsets(vector<int>& nums, int k) {
        int n = nums.size();
        vector<int> num2idx(1000 + 2 * k + 1, -1);

        for (int i = 0; i < n; ++i) {
            num2idx[nums[i] + k] = i;
        }
        
        int ret = 0;
        for(int state = 0; state < (1 << n); ++state) {
            bool isGood = true;
            for (int i = 0; i < n; ++i) {
                if ((state>>i)&1) {
                    if(num2idx[nums[i] + 2*k] != -1 && (state>>num2idx[nums[i] + 2*k])&1) {
                        isGood = false;
                        break;
                    }
                    if(num2idx[nums[i]] != -1 && (state>>num2idx[nums[i]])&1) {
                        isGood = false;
                        break;
                    }
                }
            }
            ret += isGood && state;
        }

        return ret;
    }
};

DFS might be better, but the scale of the data fits in brute-force very well.

Leave a Reply

Your email address will not be published. Required fields are marked *