1. 程式人生 > >輸出一個集合的所有子集合-Java程式碼實現(二)

輸出一個集合的所有子集合-Java程式碼實現(二)

接上篇,提供另外一種解題思路:

對於集合裡面的任何一個元素,有兩種可能,一種是在子集合裡,另一種是不在子集合裡。在子集合裡的話用1表示,不在的話用0表示,那麼一個集合的子集合都可以用二進位制表示,假設集合為{1,2,3},那麼可以用下列二級製表示:000,001,010,011......共有2^n種表示。

程式碼如下:

static ArrayList<ArrayList<Integer>> getSubsets2(ArrayList<Integer> set){
		ArrayList<ArrayList<Integer>> allsubsets = new ArrayList<ArrayList<Integer>>();
		int max = 1 << set.size(); //how many sub sets
		for(int i=0; i<max; i++){
			int index = 0;
			int k = i;
			ArrayList<Integer> s = new ArrayList<Integer>();
			while(k > 0){
				if((k&1) > 0){
					s.add(set.get(index));
				}
				k>>=1;
				index++;
			}
			allsubsets.add(s);
		}
		return allsubsets;
	}
	
	public static void main(String[] args){
		ArrayList<Integer> s = new ArrayList<Integer>();
		s.add(1);
		s.add(2);
		s.add(3);
		ArrayList<ArrayList<Integer>> allsubsets = getSubsets2(s);
		for(ArrayList<Integer> set : allsubsets){
			System.out.println(set);
		}
	}
輸出結果如下:

[]
[1]
[2]
[1, 2]
[3]
[1, 3]
[2, 3]
[1, 2, 3]

相關推薦

輸出一個集合所有集合-Java程式碼實現

接上篇,提供另外一種解題思路: 對於集合裡面的任何一個元素,有兩種可能,一種是在子集合裡,另一種是不在子集合裡。在子集合裡的話用1表示,不在的話用0表示,那麼一個集合的子集合都可以用二進位制表示,假設集合為{1,2,3},那麼可以用下列二級製表示:000,001,010,0

輸出一個集合所有集合-Java程式碼實現

找出一個集合的所有子集合,用排列組合的方式來解答此問題的話,假設集合裡面有n個元素,那個子集合的數目為2^n. 具體思路為:對於集合裡面的任何一個元素,有兩種可能,一種是在子集合裡,另一種是不在子集合裡。假如我們已經得到n-1個元素的子集合,那麼n個元素的子集合是:n-1個

Java常用的八種排序演算法與程式碼實現:歸併排序法、快速排序法

注:這裡給出的程式碼方案都是通過遞迴完成的 --- 歸併排序(Merge Sort):   分而治之,遞迴實現   如果需要排序一個數組,我們先把陣列從中間分成前後兩部分,然後對前後兩部分進行分別排序,再將排好序的數組合並在一起,這樣整個陣列就有序了   歸併排序是穩定的排序演算法,時間

淺談Java程式碼安全

先來看一段程式碼: //x, y, z 都是 int 型別 if (x + y < z) { } 這段程式碼是否存在問題呢,可能不仔細或者對資料結構不充分了解的同學就直接這麼過了,當然大多數情況下可能這段程式碼也不會產生問題,但是還是那句話,安全傾向於 “明顯沒

java程式碼優化——如何覆蓋Object的公用方法equals、hashcode、compareTo、toString

覆蓋equals方法時請遵守通用約定 什麼情況需要覆蓋equals方法? 當需要比較的類有自己的邏輯特點時,而Object的equals方法不能達到預期的效果時,就需要覆蓋equals比較類的屬性值。 覆蓋equals方法的通用約定 自反性——對於任何非null的物件

約瑟夫環問題 java程式碼實現高效率

<pre name="code" class="java">//約瑟夫問題 package com.test; public class test { public static void main(String[] args) { CycLink cycLink= n

Redis學習之java程式碼實現Jedis

前面兩篇說過redis的安裝使用和密碼設定後,現在來看看怎麼用java程式碼連線伺服器,並使用redis。 首先專案中需要有redis的驅動包,下載Jedis.jar。 下載最新驅動包,放到專案的lib目錄下,確保專案包含該驅動包。 如果是maven專案,可以直接在pom

機器學習:結點的實現,決策樹程式碼實現

文章目錄 楔子 定義變數: 定義方法 獲得劃分的feature 生成結點 停止條件及其處理 fit() 生成樹剪枝 楔子 前面已經實現了各種資訊量的計算,那麼我們劃分的基本有了,那

搶紅包案例分析以及程式碼實現 侵立刪

轉自:https://mp.weixin.qq.com/s/F1U1nUK2KF5R0nxT8lmfBg   概述 上一篇文章中使用ssm+mysql實現,存在併發超發問題,這裡我們使用悲觀鎖的方式來解決這個邏輯錯誤,並驗證資料一致性和效能狀況。 超發問題分析 針對

TensorFlow程式碼實現[實現異或門XOR]

第一個實驗:用神經網路實現異或門 測試資料如下: [0,0]->[0] [1,0]->[1] [1,1]->[0] [0,1]->[1] 資料量很小,但異或門遠沒有我想象的好寫,原來在第一層的時候我使用的啟用函式是relu,第

ASp.Net Websocket 環境支援和前端程式碼實現

寫文不容易,請尊重原創:轉載註明 http://blog.csdn.net/meng6098 Websocket的環境支援: 1.支援html5的瀏覽器 經測試ie10和google可以用  2.Net伺服器環境,.Net 4.5,IIS 8,win8,windows s

java集合類源碼分析之List

頻繁 null 並且 reel closed tco 默認 java集合 進行 這一節主要介紹List接口的幾個實現類的區別: 1.線程安全 Vector是線程安全的,而ArrayList和LinkedList是非線程安全的。從源碼中我們可知,Vector類中的方法大部分

Java常用的八種排序演算法與程式碼實現:桶排序、計數排序、基數排序

三種線性排序演算法:桶排序、計數排序、基數排序 線性排序演算法(Linear Sort):這些排序演算法的時間複雜度是線性的O(n),是非比較的排序演算法 桶排序(Bucket Sort)   將要排序的資料分到幾個有序的桶裡,每個桶裡的資料再單獨進行排序,桶內排完序之後,再把桶裡的

Java中未給定初始值的基礎資料型別為什麼不能輸出 ——Thinking in Java學習筆記

在java程式設計思想第二章節中有這麼一個練習題:定義一個類,給定兩個無初始值的int和char型別的數值,輸出兩個數的值,驗證int和char的初始值。 我第一次是這麼做的: public static void main(String[] args) { int i; char

從零寫一個Java WEB框架Server層 優化

該系列,其實是對《架構探險》這本書的實踐。本人想記錄自己的學習心得所寫下的。 從一個簡單的Servlet專案開始起步。對每一層進行優化,然後形成一個輕量級的框架。 每一篇,都是針對專案的不足點進行優化的。 專案已放上github 上一篇地

java學習筆記static方法以及static程式碼

一:static方法 1.靜態方法中可以直接呼叫同類中的靜態成員, 但不能直接呼叫非靜態成員。 如果希望在靜態方法中呼叫非靜態變數,可以通過建立類的物件, 然後通過物件來訪問非靜態變數 2.在普通成員方法中,則可以直接訪問同類的非靜態變數和靜態變數, 3.靜態方法中不能直接呼叫非靜態方法, 需要

JAVA建構函式----一個簡單的面向物件程式

本文對構造方法(函式)給出例子,進一步瞭解Java面向物件特性 要求: 完成一個java application 應用程式,描述一個人類。要求如下: 要求此人類必須包含有人的姓名、性別、出生日期

java程式碼優化——建立和銷燬物件

用靜態工廠方法代替構造器 準備知識 自動裝箱:從基本資料型別轉換成包裝型別。 自動拆箱:從包裝型別轉換成基本資料型別。 包裝類: number(數字型別) Byte(byte) Short(short) Integer(int) Long(long) Dou

《大話設計模式》Java程式碼示例之裝飾模式

裝飾模式(Decorator):動態地給一個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活。 package decorator; /** * 裝飾模式(Decorator) * Person類 */ public class Perso

《大話設計模式》Java程式碼示例之代理模式

代理模式(Proxy):為其他物件提供一種代理以控制對這個物件的訪問。 package proxy; /** * 代理模式(Proxy) * 被追求者類 */ public class SchoolGirl { private String nam