列印乙個陣列所有的非空子集

2021-09-01 23:32:11 字數 2312 閱讀 3780

採用[b]位[/b]掩碼實現列印給定陣列所有的非空子集。

[b]分析:[/b]

首先來看乙個例子,如果給定乙個正整數n,如何輸出由1到n組成的陣列所有的非空子集呢?

如n=3, 那麼1到3組成的陣列為,陣列長度為3,那麼二進位制表示有[b]1<<3 = 8[/b]種。

0 = 000 = {} 空集

1 = 001 =

2 = 010 =

3 = 011 =

4 = 100 =

5 = 101 =

6 = 110 =

7 = 111 =

[b]遍歷所有的二進位制表示式,考慮其中1的位置,並列印相應的值,就能得到我們想要的結果。[/b]

**如下:

/**

* * 給定乙個正整數n,輸出由1到n組成的陣列所有的非空子集。

* 如n=3, 那麼1到3組成的陣列為

* * 所有二進位制的情況

* * 0 = 000 = {} 空集

* 1 = 001 =

* 2 = 010 =

* 3 = 011 =

* 4 = 100 =

* 5 = 101 =

* 6 = 110 =

* 7 = 111 =

* */

public void printallsubsets(int n)

int allmasks = 1 << n;

//如考慮空集 ,那麼i的初始值為0

for (int i = 1; i < allmasks; i++)

}

依據上述例子的實現方式,下面的方法實現列印乙個字串陣列所擁有的所有非空子集。

/**

* 列印乙個陣列所有的非空子集

*/public void printallsubsets(string array)

// 陣列長度

int len = array.length;

// 根據資料的長度,得出所有二進位制的個數

// 如len =2;

// 0 = 00 = {}

// 1 = 01 =

// 2 = 10 =

// 3 = 11 =

int allmasks = 1 << len;

// 遍歷所有的二進位制表示方式

for (int i = 1; i < allmasks; i++)

}

具體的**和簡單的測試如下:

public class printallnonemptysubsets 

* * 所有二進位制的情況

* * 0 = 000 = {} 空集

* 1 = 001 =

* 2 = 010 =

* 3 = 011 =

* 4 = 100 =

* 5 = 101 =

* 6 = 110 =

* 7 = 111 =

* */

public void printallsubsets(int n)

int allmasks = 1 << n;

//如考慮空集 ,那麼i的初始值為0

for (int i = 1; i < allmasks; i++)

}/**

* 列印乙個陣列所有的非空子集

*/public void printallsubsets(string array)

// 陣列長度

int len = array.length;

// 根據資料的長度,得出所有二進位制的個數

// 如len =2;

// 0 = 00 = {}

// 1 = 01 =

// 2 = 10 =

// 3 = 11 =

int allmasks = 1 << len;

// 遍歷所有的二進位制表示方式

for (int i = 1; i < allmasks; i++)

}public static void main(string args) );

exam.printallsubsets(3);

}}

輸出結果:

a b

a b

c a c

b c

a b c

1 2

1 2

3 1 3

2 3

1 2 3

求乙個陣列的子集

該題是力扣上面的乙個題,感覺思路不錯就摘抄下來做個筆記。以後準備定期耍上面的題來提高一下自己的演算法基礎。題目描述如下 給定一組不含重複元素的正數陣列 nums,返回該陣列所有可能的子集 冪集 說明 解集不能包含重複的子集。示例 輸入 nums 1,2,3 輸出 3 1 2 1,2,3 1,3 2,...

判斷乙個陣列是否是另乙個陣列的子集

給兩個陣列 arr1 0.m 1 和arr2 0.n 1 判斷arr2是否是arr1的乙個子集合,兩個陣列都是未排序的。例子 input arr1 arr2 output arr2 is a subset of arr1 input arr1 arr2 output arr2 is a subset...

求乙個陣列集合的所有子集以及其寬度解法

對於長度為a.length的陣列,構建乙個長為a.length的01010這樣的序列,然後其所有子集就是所有的01010這樣的情況集合,共有2 a.length個。以下為1道leetcode題 對於每乙個1000.0000至111.1111,都是經歷先將0處變為1,再將1處變為1,再將2處變為1,直...