【程序员面试金典】请编写一个方法,返回某集合的所有非空子集。

题目描述

请编写一个方法,返回某集合的所有非空子集。

给定一个int数组A和数组的大小int n,请返回A的所有非空子集。保证A的元素个数小于等于20,且元素互异。各子集内部从大到小排序,子集之间字典逆序排序,见样例。

测试样例:

[123,456,789]
返回:{[789,456,123],[789,456],[789,123],[789],[456 123],[456],[123]}

class Subset {
public:
    vector<vector<int> > getSubsets(vector<int> A, int n) {
        // write code here
        sort(A.begin(), A.end());
        int size = 1 << n;
        vector<vector<int> >subsets;
        for (int i = size - 1; i > 0; --i) {
            vector<int> subset;
            for (int j = n - 1; j >= 0; --j) {
                if ((i >> j) & 1) {
                    subset.push_back(A[j]);
                }
            }
            subsets.push_back(subset);
        }
        return subsets;
    }
};

猜你喜欢

转载自blog.csdn.net/HelloZEX/article/details/81178502