一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - Java 通過位運(yùn)算求一個集合的所有子集方法

Java 通過位運(yùn)算求一個集合的所有子集方法

2020-08-27 14:49Java教程網(wǎng) Java教程

下面小編就為大家?guī)硪黄狫ava 通過位運(yùn)算求一個集合的所有子集方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

Java沒有自帶的求一個集合的所有子集的方法,我們可以通過集合的子集規(guī)律來求。

一個集合的所有子集等于2^該集合的長度。比如{c,b,a}的長度為3,這個集合的子集就有8個。

這句話看起來很簡單,但同時也隱含著高深的哲理。其實(shí)一個集合的所有集合,和2^該集合的長度這個數(shù)字有關(guān)。比如上面的例子,{c,b,a}的長度為3,則可以用0-7表示其所有子集。如下所示,改數(shù)字所對應(yīng)的位置為1,則說明我需要這個數(shù)字形成子集。從0-7的二進(jìn)制表示,剛好代表完,一個長度為3,子集個數(shù)為8的所有子集。

0(000):{}

1(001):{a}

2(010):

3(011):{ab}

4(100):{c}

5(101):{a,c}

6(110):{b,c}

7(111):{a,b,c}

于是,根據(jù)上面的規(guī)律,代碼可以這樣寫,先取集合長度,求出2^該集合的長度是多少,比如上面的8,然后從0遍歷到8-1。遍歷的時候,對0、1、2……每一個數(shù)據(jù)進(jìn)行位運(yùn)算,逐一判斷其對應(yīng)的位數(shù),也就是二進(jìn)制表示方式,那一位是1。用匯編那種,將每一位移到最末尾,與1的位與實(shí)現(xiàn),具體代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import java.util.ArrayList;
public class getSubSet {
 public static ArrayList<ArrayList<Integer>> getSubset(ArrayList<Integer> L) {
        if (L.size() > 0) {
            ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
            for (int i = 0; i < Math.pow(2, L.size()); i++) {// 集合子集個數(shù)=2的該集合長度的乘方
                ArrayList<Integer> subSet = new ArrayList<Integer>();
                int index = i;// 索引從0一直到2的集合長度的乘方-1
                for (int j = 0; j < L.size(); j++) {
                    // 通過逐一位移,判斷索引那一位是1,如果是,再添加此項(xiàng)
                    if ((index & 1) == 1) {// 位與運(yùn)算,判斷最后一位是否為1
                        subSet.add(L.get(j));
                    }
                    index >>= 1;// 索引右移一位
                }
                result.add(subSet); // 把子集存儲起來
            }
            return result;
        } else {
            return null;
    }
}
 
    public static void main(String[] args) {
    ArrayList<Integer> L = new ArrayList<Integer>();
    L.add(1);
    L.add(2);
    L.add(3);
    System.out.println(getSubset(L));
    }
 
}

運(yùn)行結(jié)果如下:

Java 通過位運(yùn)算求一個集合的所有子集方法

以上這篇Java 通過位運(yùn)算求一個集合的所有子集方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持服務(wù)器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 激情视频图片小说qvdo | 国产精品日本亚洲777 | 精品播放 | 亚洲zooz人禽交xxxx | 欧美性xxx狂流白浆 欧美性f | 好吊色青青青国产综合在线观看 | 久久精品国产在热亚洲完整版 | 日本漫画无翼乌 | 69堂最新地域网名 | 午夜精品久视频在线观看 | 国产视频久久 | 日本道三区播放区 | 无人知晓小说姜璟免费阅读 | 俄罗斯13一14处出血视频在线 | 成人免费观看一区二区 | 51精品| 无码中文字幕热热久久 | 日韩视频免费观看 | 亚洲国产精品ⅴa在线观看 亚洲国产高清一区二区三区 | 亚洲区视频在线观看 | 日本h乱淫动漫在线观看 | 色中文字幕 | 我要看免费毛片 | 亚洲29p | 教练你好大轻点漫 | 麻豆资源 | 精品视频在线观看免费 | 色综合97天天综合网 | 日本精品一区二区三区 | 国产精品成人亚洲 | 国产精品怡红院在线观看 | 亚洲福利视频一区 | 国产精品自在线 | 午夜DY888国产精品影院 | 日本在线视频免费观看 | 国产精品免费 | 国产久热香蕉在线观看 | 日本在线视频网址 | 青青草综合网 | 久久精品亚洲热综合一本 | 动漫美女被吸乳羞羞小说 |