输出字符串的所有子集

如:对“abc”

输出:

 c b bc a ac ab abc

第一种做法: 2^n 遍历每个字符,每个字符只能取或者不取。取就把该字符加入结果中,遍历完毕后,输出结果字符串。

代码如下:

//
//  main.cpp
//  输出一个集合的所有子集
//
//  Created by zjl on 16/8/10.
//  Copyright © 2016年 zjl. All rights reserved.
//#include <iostream>
#include <vector>
using namespace std;void solve(string s, string& str, vector<string>& res, int num){if(num == s.size()){res.push_back(str);return;}solve(s, str, res, num+1);str += s[num];solve(s, str, res, num+1);str.erase(str.size()-1);
}int main(int argc, const char * argv[]) {string s = "abc";vector<string> res;string str;solve(s, str, res, 0);for(auto a: res)cout<<a<<" ";cout<<endl;return 0;
}

第二种:

求字符串大小len,然后从1开始到len-1。

比如len=4, 则从1开始到3,每个为 001,010,011,100,101,111.

并对每个数字先跟1相与,并输出相应字符;然后往右>>移动,判断每个位置,若为1,则输出相应位置字符。

//
//  main.cpp
//  输出一个集合的所有子集
//
//  Created by zjl on 16/8/10.
//  Copyright © 2016年 zjl. All rights reserved.
//#include <iostream>
#include <vector>
using namespace std;void solve(string s, vector<string>& res){int len = s.size();int num = 1 << len;for(int i = 1; i < num; i++){int j = i;int k = 0;string str;while(j){if((j & 1) == 1){str += s[k];}k++;j = j >> 1;}res.push_back(str);}}int main(int argc, const char * argv[]) {string s = "abc";vector<string>res;solve(s, res);for(auto a: res)cout<<a<<" ";cout<<endl;return 0;
}

输出一个集合的所有子集相关推荐

  1. C++实现输出一个集合的全部子集

    在学习C++时遇到的一个问题:用递归实现一个集合全部子集的输出. 一开始感觉好难,虽然个数和思路很好想,有n个元素,就有2n个子集,0表示没有,1表示有. 但是如何用递归代码实现呢? 思路:类似于二进 ...

  2. 求一个集合的所有子集 Python实现

    求一个集合的所有子集 Python实现 #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Sat ...

  3. 求一个集合的所有子集

    题目描述 求一个集合的所有结合,例如集合{A,B,C}的所有子集为:{},{A,B,C},{A,B},{A,C},{B,C},{A},{B},{C}. 思路 实际上求子集问题是一个经典的DFS,每一次 ...

  4. 求一个集合的所有子集问题实现

    **问题描述 已知N个大于0的整数构成一个集合,即{1,2,3,--,N},求其所有的非空且元素不相邻的子集,计算所有子集的乘积的平方的和. 例如:集合{1,2,3,4},其所有非空不相邻子集有{1} ...

  5. 求一个集合的所有子集问题

    一个包含n个元素的集合,求它的所有子集.比如集合A= {1,2,3}, 它的所有子集是: { {1}, {2}, {3}, {1,2}, {1,3}, {2,3}, {1,2,3}, @}(@表示空集 ...

  6. 枚举一个集合的所有子集

    一个神奇的算法,在题目中看到的,单独拿出来整理枚举一个集合S(用一个二进制表示)的所有子集S0: for(int S0 = S; S0; S0 = (S0-1)&S){} 还有不包括S本身的: ...

  7. 给定一个集合,输出它的所有子集

    题目:集合是由大字字母(A-Z)组成的,要求输出集合的所有子集,每个子集一行,不能使用递归. 例如 "ABD"的子集: NULL(空集).A.B.C.AB.AC.BC.ABC(共8 ...

  8. java set子集_Java程序来检查一个集合是否是另一个集合的子集

    Java程序来检查一个集合是否是另一个集合的子集 在这个实例中,我们将学习Java中检查一个集合是否是另一个集合的子集. 要理解此示例,您应该了解以下Java编程主题: 示例1:使用HashSet类检 ...

  9. MATLAB用递归法求解集合子集,用递归法求一个集合的子集c语言,急!!!

    匿名用户 1级 2014-04-09 回答 给你个参考代码: #include <stdio.h> #define ARRAY_SIZE 5 //输出Buffer集合 void Outpu ...

最新文章

  1. 使用lucene进行group操作
  2. 南京林业大学计算机专升本,2018江苏专转本学校之:南京林业大学
  3. 2.1 基于文件读写图像数据
  4. 实地审核和系统审核_在线监测系统运行情况审核
  5. boost::statechart模块实现状态迭代测试
  6. SLAM: SLAM的发展历程(WIKI)
  7. Chrome跨域问题
  8. [转载] Python学习笔记——运维和Shell
  9. MYSQL8 度分秒(DMS)转度(DDD)函数编写实战
  10. cnn 回归 坐标 特征图_论文笔记 | CNN 是怎么学到图片绝对位置信息的
  11. tp交换机管理页面_二层网管交换机的管理方法
  12. shell中expr强大功能(2)
  13. 计算机教室网络同传及保护,用好联想网络同传系统解放信息技术教师
  14. android最新版本8.0,安卓8.0系统安装包下载
  15. 【U8】UFO另存为Excel,文件保存失败
  16. ActiveMQ专题2 —— ActiveMQ下载和安装(Linux版)
  17. 计算机复制教程,ghost复制c盘到另一个硬盘方法
  18. 用c语言绘制小猫图案,【科研猫·R】R语言从入门到精通:Day8
  19. 厦门信息计算机专业录取分数,厦门大学计算机类专业2016年在福建理科高考录取最低分数线...
  20. mysql动力节点百度云_动力节点MySQL数据库视频 百度云 网盘 下载

热门文章

  1. linux下以M为单位显示文件大小
  2. 笔记:DB2常见状态码
  3. Qt执行bash命令并获取返回结果
  4. u3d:后期屏幕渲染特效
  5. 【Web方向】 PHP代码审计 CTF题目wp1
  6. 凡科CMS采集插件全自动采集发布-凡科SEO
  7. 用这些软件重装windows也太好用了吧(懒人一键安装windows软件推荐)
  8. 寒江独钓-Windows内核安全编程总结
  9. 山雨欲来风满楼——云计算到来之前的思考
  10. 华为鸿蒙堡垒店,堡垒之夜华为鸿蒙ark os官方版