如何得到某集合的所有子集合?
我們都知道,一個含n個元素的集合擁有2^n個子集合,並且不難發現,其中每個子集合都是從0到2^n-1 每個數的二進位制格式中0 放棄,1選擇的結果,如下所示:
{} 000
{1} 100
{2} 010
{1,2} 110
{3} 001
{1,3} 101
{2,3} 011
{1,2,3} 111
所以根據數字的二進位制轉換,可以輕鬆獲得一個集合的所有子集合,程式碼如下:
Sub GETALL(ByVal mycollection As String, ByRef RESULT() As String)
Dim x() As String
x = Split(Mid(mycollection, 2, Len(mycollection) - 2), ",")
Dim A() As String, b() As Integer '臨時陣列
Dim n As Integer ' 集合元素個數
Dim i As Long '迴圈變數
Dim num As Integer '子集合元素個數
Dim TEMP As Integer '二進位制轉換中間變數
n = UBound(x) + 1
ReDim b(0 To n - 1)
ReDim RESULT(2 ^ n - 1)
Debug.Print "集合 " & mycollection & " 共有子集合 " & 2 ^ n & " 個!"
For i = 0 To 2 ^ n - 1
TEMP = i
num = 0
For j = 0 To n - 1 '轉換為二進位制
b(j) = TEMP And 1 '0 or 1
TEMP = TEMP / 2
If b(j) = 1 Then
num = num + 1
ReDim Preserve A(1 To num)
A(num) = x(j)
End If
Next
RESULT(i) = "{" & Join(A, ",") & "}" '結果儲存
Debug.Print RESULT(i) '輸出
Next
MsgBox "OK"
End Sub
Private Sub Command1_Click()
Dim S() As String
GETALL "{1,2,3,4,5,6}", S
End Sub
輸出:
集合 {1,2,3,4,5,6} 共有子集合 64 個!
{}
{1}
{2}
{1,2}
{3}
{1,3}
{2,3}
{1,2,3}
{4}
{1,4}
{2,4}
{1,2,4}
{3,4}
{1,3,4}
{2,3,4}
{1,2,3,4}
{5}
{1,5}
{2,5}
{1,2,5}
{3,5}
{1,3,5}
{2,3,5}
{1,2,3,5}
{4,5}
{1,4,5}
{2,4,5}
{1,2,4,5}
{3,4,5}
{1,3,4,5}
{2,3,4,5}
{1,2,3,4,5}
{6}
{1,6}
{2,6}
{1,2,6}
{3,6}
{1,3,6}
{2,3,6}
{1,2,3,6}
{4,6}
{1,4,6}
{2,4,6}
{1,2,4,6}
{3,4,6}
{1,3,4,6}
{2,3,4,6}
{1,2,3,4,6}
{5,6}
{1,5,6}
{2,5,6}
{1,2,5,6}
{3,5,6}
{1,3,5,6}
{2,3,5,6}
{1,2,3,5,6}
{4,5,6}
{1,4,5,6}
{2,4,5,6}
{1,2,4,5,6}
{3,4,5,6}
{1,3,4,5,6}
{2,3,4,5,6}
{1,2,3,4,5,6}
相關推薦
如何得到某集合的所有子集合?
我們都知道,一個含n個元素的集合擁有2^n個子集合,並且不難發現,其中每個子集合都是從0到2^n-1 每個數的二進位制格式中0 放棄,1選擇的結果,如下所示: {} 000 {1} 100 {2} 010 {1,2}
輸出一個集合的所有子集合-Java程式碼實現(二)
接上篇,提供另外一種解題思路: 對於集合裡面的任何一個元素,有兩種可能,一種是在子集合裡,另一種是不在子集合裡。在子集合裡的話用1表示,不在的話用0表示,那麼一個集合的子集合都可以用二進位制表示,假設集合為{1,2,3},那麼可以用下列二級製表示:000,001,010,0
輸出一個集合的所有子集合-Java程式碼實現(一)
找出一個集合的所有子集合,用排列組合的方式來解答此問題的話,假設集合裡面有n個元素,那個子集合的數目為2^n. 具體思路為:對於集合裡面的任何一個元素,有兩種可能,一種是在子集合裡,另一種是不在子集合裡。假如我們已經得到n-1個元素的子集合,那麼n個元素的子集合是:n-1個
輸出一個集合的所有子集合
set<set<int> > result; if (input.size() == 1) // 集合只有一個元素,子集合就是自己 { set<int> one; one.insert(*input.beg
Set集合及其子集合HashSet 、LinkedHashSet、TreeSet;Map集合及其子集合HashMap、Hashtable;Collections(集合工具類);IO概述和異常
Set集合 TreeSet的排序例項 需求:儲存自定義物件到TreeSet集合中,並遍歷 package OBT; public class Student implements Comparable<Student>{ String
JAVA 獲取某段時間內的所有日期集合
獲取指定日期 public static void main(String[] args) { SimpleDateFormat sdf = new SimpleDateFo
獲取json數據中所有key集合
判斷 var seinfo color func esc json數據 eof mode /** * 獲取json數據中所有key */ function fetchResponseInfo(responseInfo){ //判斷是否為空
[LeetCode] 78. Subsets 子集合
tinc ++i integer += pre distinct size_t sort contain Given a set of distinct integers, nums, return all possible subsets (the power set).
泛型,JDK5新特性,List集合子實現類,Map集合,Set/TreeSet集合,asList
JDK5新特性 List集合子實現類 Map集合 Set/TreeSet集合 asList 一、泛型(JDK5以後新特性) 1、概述:泛型直接規定集合的存儲類型,將明確的集合類型的工作推遲到了創建對象或者調用方法的時候,屬於一種參數化類型,可作參數傳遞。2、優點(1)將運行時期異常提前到了
樹形結構根據某節點查詢本節點及下屬所有子節點的遞歸實現
ret sele 單位 returns rom append app mco param 數據表中CompanyId,ParentCompany,有層級關系,樹形結構根據某節點查詢本節點及下屬所有子節點的遞歸實現如下: public string id
unity深度查找某個子物體和遍歷所有子物體方法
new cal ons foreach 是我 destroy 目標 call void 本文總結一下關於unity的查找子物體的方法 首先說明一下這裏將講三種查找子物體方法: 查找固定路徑的某一個子物體的方法、通過名字深度查找某個子物體的方法、查找父物體下所有子物體的方
JAVA中所有與集合有關的實現類都是這六個接口的實現類
length 數字 pack 有關 結構 [] rgs val 無序 JAVA中所有與集合有關的實現類都是這六個接口的實現類。 Collection接口:集合中每一個元素為一個對象,這個接口將這些對象組織在一起,形成一維結構。 List接口代表按照元素一定的相關順序
Java獲取兩個日期之間的所有日期集合
1.返回Date的list private List<Date> getBetweenDates(Date start, Date end) { List<Date> result = new ArrayList<Date>(); Calendar
java 集合分組,集合根據某一條件分組,封裝成map形式
集合中為物件,根據物件中的某一屬性值分組 例子 1、實體類:構造方法、get/set方法、toString方法省略 public class User { private String id; private String name;
儲存過程遞迴樹結構實現(某一節點下所有子節點)三種方式
最近專案中碰到需要寫遞迴,就特意實現了集中實現方式,總結一下~ 情景:通過給出的機構id,得到該機構id以及所有的子機構資訊,機構id是UUID; 通過三種方式去實現,親自實現過,可直接用: 第一種:通過多次操作資料庫獲得所有子機構資訊。實現如下: /** * 遞
MongoDB新增使用者,登入命令,查詢所有資料庫集合命令
登入命令:db.auth("使用者名稱","密碼")注意要先切換相應資料庫. 查詢所有資料庫名:show dbs 查詢當前資料庫所有集合:show collections 定義:建立一個數據庫新使用者用db.createUser()方法,如果使用者存在則返回一個使用者重複錯
[LeetCode] Largest Divisible Subset 最大可整除的子集合
Given a set of distinct positive integers, find the largest subset such that every pair (Si, Sj) of elements in this subset satisfies: Si % Sj = 0 or Sj
深入Collection集合的子介面List
今天來理順一下Java裡面的Collection集合以及裡面的子集合,請看下面這張圖片: Collectio集合有兩個子介面:List和Set List的特點:元素是有序的,元素可以重複,因為該集合體繫有索引 Set的特點:元素是無序的,元素不能重複 List集合底下的三
Java中Map集合及其子類
Collection集合的特點是每次進行單個物件的儲存,如果現在要進行一對物件的儲存,就只能用Map集合來完成,即Map集合中會一次性儲存兩個物件,且這兩個物件的關係:key = value結構。這種結構的最大特點是可以通過key找到對應的value內容。1.Map介面Map
JAVA----集合的子介面List
List List:列表 此介面對應的實現類的特點都是:有序的,可以重複的 重複與否與元素的equals方法有關 常用方法: void add(int