利用位運算求子集

2021-10-01 23:54:02 字數 685 閱讀 2847

紫書第189頁

給你乙個集合,讓你求集合的所有子集;

我們都知道長為n的集合子集個數為 2^n 個(包含了空集);

一般都是遞迴求子集,沒想到還可以運用位運算求;

具體思路就不展開了,總的來說就是每個元素在子集裡都有兩種情況(取或不取),可以用0和1來代表,這就跟位運算的性質所吻合;

**:

#include

#define ll long long

#define pa pair

#define lson k<<1

#define rson k<<1|1

#define inf 0x3f3f3f3f

//ios::sync_with_stdio(false);

using

namespace std;

const

int n=

200100

;const

int m=

1000100

;const ll mod=

998244353

;int a[4]

=;void

print_subset

(int n,

int s)

cout<}int

main()

return0;

}

leetcode 78 子集(位運算求子集)

給定一組不含重複元素的整數陣列 nums,返回該陣列所有可能的子集 冪集 說明 解集不能包含重複的子集。示例 輸入 nums 1,2,3 輸出 3 1 2 1,2,3 1,3 2,3 1,2 分析 含有n個元素的集合共有 1 一位後與 1的方式判斷最後一位是0還是1,如果是1,就把對應位置的數加入到...

利用移位運算求解子集

最近在學習了移位操作符後,利用移位輕鬆的解決了求乙個集合的所有 子集的問題。如乙個子集為ac,則相應的二進位製碼為1010,依次判斷每一位,若該位為1,則取相應的元素 public class collection01 int len str.length 計算共有多少個子集 for int i 0...

位運算求和

劍值offer上有道題很有趣,求兩數和,要求 寫乙個函式,求兩個整數之和,要求在函式體內不得使用 四則運算符號。一看不能直接加減,那就考慮二進位制之間的與或非移位操作。求和主要有兩點 1.每一位數字相加 2.考慮是否進製 主要步驟 二進位制各位數字相加,我們都知道運算規則是 0 0 0,1 1 0,...