输出集合的子集---二进制法

技术博客:子集生成与打印
本文介绍如何通过二进制操作打印数组的所有子集,实现了一个子集生成算法并提供了具体代码示例。

最近笔试面试宣讲会也是跑得焦头烂额,心桑就对 = = 

不记下来很快就忘,第一次写技术博客,希望能一直坚持下去,go~


一个集合有2^n个子集,包括空集和全集。

一个数组如{1, 2, 3, 4},可以通过和数字的二进制形式取交集打印出它的全部子集。1等价于(0001)则打印出{1}(从右往左则打印{4}),  3等价于(0011)则打印出{1, 2} (或者{4, 3})。

代码如下:

public class Subset {
	
	public static void main(String[] args) {
		int[] arr = {1, 3, 2, 4, 5};
		printSet(arr);
	}
	
	public static void printSet(int[] arr) {
		//一共有2^n(n即数组大小)个子集
		for (int i=0; i < (1<<arr.length); i++) {
			//遍历二进制数的每一位,若该位为1则对应数组该位置的数在这个子集合中
			for (int j=0; j<arr.length; j++) {
				if (((i>>j) & 1) != 0) {
					System.out.print(arr[j] + " ");
				}
			}
			System.out.println();
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值