子集三种生成方法 java
增量构造法
public class Main1 {
static int A[] = new int[1 << 7];
static int da[] = new int[1<<7]; public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int n = sc.nextInt();
for (int i = 0; i < n; i++) {
da[i] = sc.nextInt();
} print_subset(n, A, 0,da); } } private static void print_subset(int n, int[] A, int cur,int da[]) {
// 打印当前集合
for(int i=0;i<cur;i++)
System.out.printf("%d ",da[A[i]]); //如果不加da[]的话,这里输出的是下标值,位向量中同理
System.out.println();
int s = cur>0?A[cur-1]+1:0; //这个表示最小值的下标,cur不等于0的时候,即cur前面还有下标元素,为了得到全部的子集,所以这里不能漏掉,便从最小的那一个选
//那为什么A[cur-1]+1就是最小的下标呢,刚刚输出的最后一个下标就是A[cur-1],所以这一个下标+1,即还未选择过的最小下标
for(int i=s;i<n;i++){
A[cur]=i;
print_subset(n, A, cur+1,da);
}
}
}
位向量法
public class Main1 {
static int b[] = new int[1 << 7];
static int da[] = new int[1 << 7]; public static void print(int n, int cur, int b[], int da[]) {
if (cur == n) {
for (int i = 0; i < n; i++) {
if (b[i] == 1)
System.out.printf("%d ", da[i]);
}
System.out.println();
return;
}
b[cur] = 1;
print(n, cur + 1, b, da);
b[cur] = 0;
print(n, cur + 1, b, da);
} public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int n = sc.nextInt();
for (int i = 0; i < n; i++)
da[i] = sc.nextInt();
print(n, 0, b, da);
}
}
}
二进制法
public class Main1 {
public static void sort(int n,int s,String str){
for(int i=0;i<n;i++)
{
int res = s&(1<<i);//看这2的n次方个数上哪些的位数是1。
if(res != 0)
System.out.print(str.charAt(i));//然后打印子集即可。
}
System.out.println();
}
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();//从控制台得到字符串
int n = str.length();
for(int i=0;i<(1<<n);i++)//一共有2的n次方个子集
sort(n,i,str);
}
}
子集三种生成方法 java的更多相关文章
- Java中Map的三种遍历方法
Map的三种遍历方法: 1. 使用keySet遍历,while循环: 2. 使用entrySet遍历,while循环: 3. 使用for循环遍历. 告诉您们一个小秘密: (下↓面是测试代码,最爱看 ...
- iOS——浅谈iOS中三种生成随机数方法
ios 有如下三种随机数方法:
- java数组中的三种排序方法中的冒泡排序方法
我记得我大学学java的时候,怎么就是搞不明白这三种排序方法,也一直不会,现在我有发过来学习下这三种方法并记录下来. 首先说说冒泡排序方法:冒泡排序方法就是把数组中的每一个元素进行比较,如果第i个元素 ...
- SuperDiamond在JAVA项目中的三种应用方法实践总结
SuperDiamond在JAVA项目中的三种应用方法实践总结 1.直接读取如下: @Test public static void test_simple(){ PropertiesConfigur ...
- Java List /ArrayList 三种遍历方法
java list三种遍历方法性能比较http://www.cnblogs.com/riskyer/p/3320357.html JAVA LIST 遍历http://blog.csdn.net/lo ...
- 2017.10.25 Java List /ArrayList 三种遍历方法
java list三种遍历方法性能比较 学习java语言list遍历的三种方法,顺便测试各种遍历方法的性能,测试方法为在ArrayList中插入记录,然后遍历ArrayList,测试代码如下: pac ...
- (java)selenium webdriver学习---三种等待时间方法:显式等待,隐式等待,强制等待
selenium webdriver学习---三种等待时间方法:显式等待,隐式等待,强制等待 本例包括窗口最大化,刷新,切换到指定窗口,后退,前进,获取当前窗口url等操作: import java. ...
- iOS-浅谈iOS中三种生成随机数方法
ios 有如下三种随机数方法:
- C#使用DataSet Datatable更新数据库的三种实现方法
本文以实例形式讲述了使用DataSet Datatable更新数据库的三种实现方法,包括CommandBuilder 方法.DataAdapter 更新数据源以及使用sql语句更新.分享给大家供大家参 ...
随机推荐
- 一条sql执行过长的时间,你如何优化,从哪些方面?
1.查看sql是否涉及多表的联表或者子查询,如果有,看是否能进行业务拆分,相关字段冗余或者合并成临时表(业务和算法的优化) 2.涉及链表的查询,是否能进行分表查询,单表查询之后的结果进行字段整合 3. ...
- “HtmlAgilityPack”已拥有为“System.Net.Http”定义的依赖项的解决方案
#事故现场 在vs2013上用nuget安装 HtmlAgilityPack -Version 1.8.9时,报错如下: Install-Package : “HtmlAgilityPack”已拥有为 ...
- 在鼠标右键上加入使用notepad++编辑【转】
我们在安装完notepad++文本编辑器之后,在一个文本文件上右键有时候并没有出现“使用notepad++编辑的选项”,我们可以通过简单地修改注册表文件来增加这样的功能: 1. 首先打开注册表,wi ...
- html - 表单form
一.表单 功能:表单用于向服务器传输数据,从而实现用户与Web服务器的交互 表单能够包含input系列标签,比如文本字段.复选框.单选框.提交按钮等等. 表单还可以包含textarea.select. ...
- Yii2.0连接多个数据库
Yii2.0连接多个数据库 一个项目根据需要会要求连接多个数据库,这里记录下实际项目中的操作流程.包括对数据库连接的配置以及如何生成模型文件,在控制器中加以运用. 一.配置 打开数据库配置文件c ...
- Python中__get__, __getattr__, __getattribute__的区别及延迟初始化
本节知识点 1.__get__, __getattr__, __getattribute__的区别 2.__getattr__巧妙应用 3.延迟初始化(lazy property) 1.__get__ ...
- 【归纳】正则表达式及Python中的正则库
正则表达式 正则表达式30分钟入门教程 runoob正则式教程 正则表达式练习题集(附答案) 元字符\b代表单词的分界处,在英文中指空格,标点符号或换行 例子:\bhi\b可以用来匹配hi这个单词,且 ...
- [好文mark] 深度学习中的注意力机制
https://cloud.tencent.com/developer/article/1143127
- SpringMVC+Spring+Hibernate整合开发
最近突然想认真研究下java web常用框架,虽然现在一直在用,但实现的整体流程不是很了解,就在网上搜索资料,尝试自己搭建,以下是自己的搭建及测试过程. 一.准备工作: 1/安装并配置java运行环境 ...
- 【原创】大叔经验分享(23)spark sql插入表时的文件个数研究
spark sql执行insert overwrite table时,写到新表或者新分区的文件个数,有可能是200个,也有可能是任意个,为什么会有这种差别? 首先看一下spark sql执行inser ...