输出一个集合的所有子集
输出字符串的所有子集
如:对“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;
}
输出一个集合的所有子集相关推荐
- C++实现输出一个集合的全部子集
在学习C++时遇到的一个问题:用递归实现一个集合全部子集的输出. 一开始感觉好难,虽然个数和思路很好想,有n个元素,就有2n个子集,0表示没有,1表示有. 但是如何用递归代码实现呢? 思路:类似于二进 ...
- 求一个集合的所有子集 Python实现
求一个集合的所有子集 Python实现 #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Sat ...
- 求一个集合的所有子集
题目描述 求一个集合的所有结合,例如集合{A,B,C}的所有子集为:{},{A,B,C},{A,B},{A,C},{B,C},{A},{B},{C}. 思路 实际上求子集问题是一个经典的DFS,每一次 ...
- 求一个集合的所有子集问题实现
**问题描述 已知N个大于0的整数构成一个集合,即{1,2,3,--,N},求其所有的非空且元素不相邻的子集,计算所有子集的乘积的平方的和. 例如:集合{1,2,3,4},其所有非空不相邻子集有{1} ...
- 求一个集合的所有子集问题
一个包含n个元素的集合,求它的所有子集.比如集合A= {1,2,3}, 它的所有子集是: { {1}, {2}, {3}, {1,2}, {1,3}, {2,3}, {1,2,3}, @}(@表示空集 ...
- 枚举一个集合的所有子集
一个神奇的算法,在题目中看到的,单独拿出来整理枚举一个集合S(用一个二进制表示)的所有子集S0: for(int S0 = S; S0; S0 = (S0-1)&S){} 还有不包括S本身的: ...
- 给定一个集合,输出它的所有子集
题目:集合是由大字字母(A-Z)组成的,要求输出集合的所有子集,每个子集一行,不能使用递归. 例如 "ABD"的子集: NULL(空集).A.B.C.AB.AC.BC.ABC(共8 ...
- java set子集_Java程序来检查一个集合是否是另一个集合的子集
Java程序来检查一个集合是否是另一个集合的子集 在这个实例中,我们将学习Java中检查一个集合是否是另一个集合的子集. 要理解此示例,您应该了解以下Java编程主题: 示例1:使用HashSet类检 ...
- MATLAB用递归法求解集合子集,用递归法求一个集合的子集c语言,急!!!
匿名用户 1级 2014-04-09 回答 给你个参考代码: #include <stdio.h> #define ARRAY_SIZE 5 //输出Buffer集合 void Outpu ...
最新文章
- 使用lucene进行group操作
- 南京林业大学计算机专升本,2018江苏专转本学校之:南京林业大学
- 2.1 基于文件读写图像数据
- 实地审核和系统审核_在线监测系统运行情况审核
- boost::statechart模块实现状态迭代测试
- SLAM: SLAM的发展历程(WIKI)
- Chrome跨域问题
- [转载] Python学习笔记——运维和Shell
- MYSQL8 度分秒(DMS)转度(DDD)函数编写实战
- cnn 回归 坐标 特征图_论文笔记 | CNN 是怎么学到图片绝对位置信息的
- tp交换机管理页面_二层网管交换机的管理方法
- shell中expr强大功能(2)
- 计算机教室网络同传及保护,用好联想网络同传系统解放信息技术教师
- android最新版本8.0,安卓8.0系统安装包下载
- 【U8】UFO另存为Excel,文件保存失败
- ActiveMQ专题2 —— ActiveMQ下载和安装(Linux版)
- 计算机复制教程,ghost复制c盘到另一个硬盘方法
- 用c语言绘制小猫图案,【科研猫·R】R语言从入门到精通:Day8
- 厦门信息计算机专业录取分数,厦门大学计算机类专业2016年在福建理科高考录取最低分数线...
- mysql动力节点百度云_动力节点MySQL数据库视频 百度云 网盘 下载