python列出集合中所有子集

2022-07-19 08:39:14 字數 996 閱讀 6939

廢話不多說直接上**,還有其他方法那些比較好理解。今天只說一下二進位制位運算的方法。

0 --> 0000

1 [1] --> 0001

2 [2] --> 0010

3 [1, 2] --> 0011

4 [3] --> 0100

5 [1, 3] --> 0101

6 [2, 3] --> 0110

7 [1, 2, 3] --> 0111

8 [4] --> 1000

9 [1, 4] --> 1001

10 [2, 4] --> 1010

11 [1, 2, 4] --> 1011

12 [3, 4] --> 1100

13 [1, 3, 4] --> 1101

14 [2, 3, 4] --> 1110

15 [1, 2, 3, 4] --> 1111

經過上面的轉換發現,二進位制和集合可以完美的對映。

接下來說**

for i in range(2 ** n): 2**n為子集個數。所以每迴圈一次為乙個子集

for j in range(n): 集合的長度進行迴圈,為了對二進位制對映進行位移判斷

if (i >> j) % 2:    

[2, 3, 4] -> 1110 --> 14  用這個子集舉例

在不知道子集為[1,2,3]的前提下我們只知道這是第十四個迴圈也就是第十四個子集。

將14轉換成二進位制後為 1110 然後對其進行位運算 。

我們將二進位制當前位數值為1的對應集合位置的值存入當前子集

for j in range(n)

迴圈第一次的時候j為0也就是說if (i >> j) % 2:  i也就是1110 位移0位 模 2   結果為0 所以集合中下標為j的位置資料不屬於該子集

同理第二次迴圈 位移一位得到值為111 模 2 結果為1  所以集合中下標為j的位置資料屬於該子集

第三第四次迴圈同理最後得該子集為[2, 3, 4]

集合中所有子集元素之和

題目 給乙個集合array,包含n個數。規定集合的 值 為集合中所有元素的和。求該集合的所有子集的值的和。示例 陣列 1,2 它的子集有空集,1 2 1,2 子集各自的值為0,1,2,3 所以子集值的和為0 1 2 3 6 解法一 思路 簡單暴力的方法就是窮舉陣列所有的子集,然後逐個求子集的值,然後...

子集合問題,排列出所有子集組合

想了好幾天,網上也沒有給出具體方法,索性就自己寫了乙個,但是效率不是很高,可以根據需求進行優化 public static void subset int arr,int target,list alllist else 遞迴結果集 public static void recursion int ...

集合a 列出它所有的不顛倒順序的子集合

code 需求是 就是不能顛倒順序 如出現 a集合 因為不能顛倒順序,那麼就按照原來的順序 只是顯示與不顯示的問題 1 顯示 0 不顯示 private static void sort2 char b else if cursor i cursor arr pos count 20 cursor ...