集合的子集

题目描述

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

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

测试样例:

class Permutation {
public:
    vector<string> getPermutation(string A) {
        vector<string> res;
        if(A.size() == 0)
            return res;

        int cur = 0;
        permutation(A,res,cur);
        sort(res.begin(),res.end(),greater<string>());

        return res;
    }

    void permutation(string A,vector<string> &res,int cur){
        int len = A.size();

        if(cur == len - 1){
            res.push_back(A);
            return;
        }

        for(int i = cur;i < len;i++){
            swap(A[i],A[cur]);
            permutation(A,res,cur+1);
            swap(A[i],A[cur]);
        }
    }
};
时间: 2024-11-09 18:36:53

集合的子集的相关文章

集合习题之列出有限集合所有子集

1.题目(<离散数学及其应用>第6版P75 20 题) 给出可以列出有限集合所有子集的步骤. 2.  解题思路 假设有集合A = {a1, a2 … an},列出其所有子集. 先列出含有1个元素的所有子集:{a1},{a2} … {an} 然后列出含有2个元素的所有子集:{a1,a2},{a1,a3}…{an-1,an} 同上所示,一直列到含有n个元素的所有子集 可以看出,问题就简化为求在 A 集合中,求含有固定 x 个元素的所有子集(注意,子集中每个ai只能包含一次). 这实际上类似这么个问

求集合的子集

package com.xsz.demo; /**     * @author cwqi    * @date 2014-11-19 下午9:55:31    */ public class SubSet { /**  * 求集合的子集  * @param args  */ public static void main(String[] args) { int array[] = {1,2,3}; SubSet.getSubSet(array); } private static void g

【Leetcode】78. Subsets(求集合的子集问题)

78. Subsets(求集合的子集问题) [分析]:求集合的所有子集问题.题目要求子集中元素非递减序排列,因此我们先要对原来的集合进行排序.原集合中每一个元素在子集中有两种状态:要么存在.要么不存在.这样构造子集的过程中每个元素就有两种选择方法:选择.不选择,因此可以构造一颗二叉树,例如对于例子中给的集合[1,2,3],构造的二叉树如下(左子树表示选择该层处理的元素,右子树不选择),最后得到的叶子节点就是子集:{ 链接 } 1 class Solution 2 { 3 private: 4 v

python 实现求一个集合的子集

概要 今天偶然看到有个关于数学中集合的问题,就突发奇想的想用python实现下求一个集合的子集. 准备 我当然先要复习下,什么是集合,什么是子集? 比较粗犷的讲法,集合就是一堆确定的东西,细致一点的讲法呢,就是由一个或多个确定的元素所构成的整体,集合中的东西称为元素. 集合有一些特性: 1.确定性 给定一个集合,任给一个元素,该元素或者属于或者不属于该集合,二者必居其一,不允许有模棱两可的情况出现. 2.互异性 一个集合中,任何两个元素都认为是不相同的,即每个元素只能出现一次.有时需要对同一元素

59-python基础-python3-集合-集合常用方法-判断一个集合是否是另一个集合的子集-issubset()-issuperset()

判断一个集合是否是另一个集合的子集-issubset()-issuperset() 1-issubset() s1.issubset(s) 判断s1是否是s的子集 2-issuperset() 与issubset()相反 原文地址:https://www.cnblogs.com/summer1019/p/11384528.html

集合的子集输出(位运算方式)

问题:怎样找出某个集合的所有子集,怎样找出某个集合指定元素个数的所有子集? 思路:对集合中所有元素进行标记,0表示未选中,1表示选中.假如有一个集合有3个元素为 {1,2,3}, 则 000 表示一个都不选, 001表示选中数组中第一个元素1,010表示选中数组中第2个元素2,011表示选中数组中第1,2个元素即是1,2.... 这样一来,集合{1,2,3}的所有子集(忽略空集)可以表示为 001 -> 111 这样的编码.这样,我们就知道集合的所有子集的个数,即是 2^3=8个.所以,如果我们

两种求集合所有子集的方法

假设我们有一个求集合的全部子集(包含集合自身)的需求,即有一个集合s,包含两个元素 <a,b>,则其全部的子集为<a,ab,b>. 不难求得,子集个数sn与原集合元素个数n之间的关系为:sn=2^n-1. 本文分别讲述两种实现方法: 一:位图法: 1)构造一个和集合一样大小的数组A,分别与集合中的某个元素对应,数组A中的元素只有两种状态:"1"和"0",分别代表每次子集输出中集合中对应元素是否要输出,这样数组A可以看作是原集合的一个标记位图.

某个集合的子集问题

int WToSigArray(int* A, int n)//消除重复元素 { int i,j,k; for( i = k = 1; i < n; i++) { for( j = 0; j < k; j++) { if(A[j] == A[i]) { break; } } if(j == k) { A[k] = A[i]; k++; } } return k; } int Subset( int* A, int n, int* B, int m, int cur) //集合A,输出m个元素的

两种求集合全部子集的方法

如果我们有一个求集合的所有子集(包括集合自身)的需求,即有一个集合s,包括两个元素 <a,b>,则其所有的子集为<a,ab,b>. 不难求得,子集个数sn与原集合元素个数n之间的关系为:sn=2^n-1. 本文分别讲述两种实现方法: 一:位图法: 1)构造一个和集合一样大小的数组A,分别与集合中的某个元素相应,数组A中的元素仅仅有两种状态:"1"和"0",分别代表每次子集输出中集合中相应元素是否要输出.这样数组A能够看作是原集合的一个标记位图