最近在力扣刷題的時候總是碰到需要遍歷子集的類似問題,然後看到了乙個比較巧妙的方式在這裡總結論述一下
現有集合u,若存在集合a切a中的所有元素在u中都可以找到,那麼集合a為元素u的子集。
根據上述內容來說,我們可以了解到對於乙個集合的子集,我們可以對每乙個元素進行選擇,每乙個元素都有選擇或者不選擇兩種狀態,而對於兩種狀態來說,我們可以模擬到二進位制的0和1,所以我們可以構建乙個長度為集合u元素個數的二進位制數來進行集合子集遍歷。即從0到2^u.length的遍歷,而二進位制的1代表集合中選中的元素。遍歷
for(int i=0;i< 1<> j)&1)==1)
}}
**實現-遞迴
遞迴
dfs(int x)
dfs(x+1,true);//true和false根據題目完成對應需求
dfs(x+1,false);
}
子集生成 二進位制方法與遞迴方法
二進位制方法 include include using namespace std int n vector con void get sub int input printf n int main int argc,char const argv int i 0 while 0 length i...
機器學習理論 概率論與數理統計 獨立和不相關
獨立和互斥的區別在此省略,比較好理解。首先我們看協方差的定義 cov x,y e.協方差的性質有 cov x,y cov y,x cov ax b,cy d accov x,y cov x1 x2,y cov x1,y cov x2,y cov x,y e xy e x e y 若兩變數x和y相互獨...
對於二進位制原碼反碼和補碼的理解
x x 第一位是符號位,0代表正數,1代表負數。正數的原碼,反碼,補碼一樣。例如 3 的原碼是 0000 0011 反碼也是 0000 0011 補碼還是 0000 0011。負數的原碼,反碼,補碼不一樣。所以引入反碼和補碼的概念完全是為了負數。因為計算機中沒有減法,只有加法。例如 2 的原碼是 1...