数组(全部子集)一
為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??
#include <stdio.h> #include <stdlib.h> #include <math.h>int printSubsequences(int arr[], int len) {unsigned int opsize = pow(2, len);int cnt;int j;for (cnt = 0; cnt < opsize; cnt++){ printf("{ ");for (j = 0; j < len; j++) {if (cnt & (1 << j)) {printf("%d ", arr[j]);} } printf("}\n");} return 0; }int main(int argc, char *argv[]) {int arr[] = {1, 2, 3}; int len = sizeof(arr) / sizeof(arr[0]);printSubsequences(arr, len);return 0; }輸出結(jié)果:
{ } { 1 } { 2 } { 1 2 } { 3 } { 1 3 } { 2 3 } { 1 2 3 }?
原理:
數(shù)組元素個數(shù) ?為 ?3 ,那么 全部子集有 ?2**3 = 8 個, 使用 位圖表示,其中 位為 1 表示數(shù)組下標對應(yīng)的位置。
0 0 0 ?=>?{ }
0 0 1 ?=> { 1 }
0 1 0 => { 2 }
0 1 1 => { 1, 2}
1 0 0 => { 3 }
1 0 1 =>{1 , 3}
1 1 0 => {2 , 3}
1 1 1 => {1, 2, 3}
轉(zhuǎn)載于:https://my.oschina.net/tsh/blog/869210
總結(jié)
- 上一篇: 使用RunTime添加动态方法、方法交换
- 下一篇: 使用LeakCanary遇到的问题 就是