ユニークなNビットの2 ^ Nの数のサブセットは、サブセットの表現の総数は、ビット操作を使用して、2つ、です。例えば<< 1 3 = 1×2×2×2 = 8、それは1 << Nのように表すことができます。
注意点:ベクトル<整数> RES、直接ステートメントもしそうならない初期値と、[]このような形態である中空内部は、あるのでときに出力する出力の次のサイクル空集合
アイデア:1つの2 ^ Nサイクルを確立するために、各番号(バイナリ)が循環され、ビット演算&NUMSの各桁(1 << j)は、ビットは入力ベクトルに対応し、最終的な出力を行います外側のループの完全なサブセットはNUMSの全てのサブセットで完了する。
操作のポイントがあったとは思いませんでした、コード最適化、読みやすくは語りました。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
クラス解決{ パブリック: ベクトル <ベクトル< INT >>サブセット(ベクトル< INT >&NUMS){ ベクトル <ベクトル< INT >> RES。 INT結果= nums.size()。 整数 N = 1つの << 結果。 用(INT iは= 0 ; I <N I ++ ) { ベクトル < INT > V。 用(INT J = 0 ; J <結果、J ++ ) { IF(I&(1 << J)) // 計算し、対応する場合NUMSみんなiが対応するかどうかを、対応するビット出力NUM置く { v.push_backを(NUMS [J]); } } res.push_back( V); } 戻りRES; } }。
知識ポイントリンク:
1:https://blog.csdn.net/qq531958586/article/details/82928316