回答編集履歴
1
ソース修正
test
CHANGED
@@ -149,3 +149,43 @@
|
|
149
149
|
|
150
150
|
|
151
151
|
**補足: ** `X`のべき集合を、数学で書くとき、「2のX乗」みたいに書くこともあってん。意味するところとして、`X` の要素の数を `|X|` と書くとすると、`X`のべき集合の要素の数は 2の|X|乗になるねん。今回の例だと、`X = {1, 2, 3, 4, 5, 6}` で、要素の数は 6 個やから、そのべき集合の要素数は 2の6乗の64やねん。これは、`'ABCDEFG'`から作られるピリオド入れた文字列のパターン数に一致するゆうこっちゃ。ただし、64パターンの中には、0個のピリオドを入れる、つまりピリオドを入れないという操作で得られる、元の文字列と同じ文字列も含まれんで。(なぜゆうたら、べき集合には必ず空集合∅が含まれとるからやねん)
|
152
|
+
|
153
|
+
|
154
|
+
|
155
|
+
|
156
|
+
|
157
|
+
**さらに追伸:** 要素n個の集合のべき集合を、再帰と、0以上(2のn乗-1)以下の整数に対するビット操作の2通りで作ろうゆう人がおったわ➡ [Power Set Algorithm with Recursion or Bits](https://blog.devgenius.io/power-set-algorithm-with-recursion-or-bits-cc3ffcfc0daa)
|
158
|
+
|
159
|
+
ビット操作でやるのやったら、こちらさんが書いたコード
|
160
|
+
|
161
|
+
```javascript
|
162
|
+
|
163
|
+
var powerSet = function (str) {
|
164
|
+
|
165
|
+
const results = [];
|
166
|
+
|
167
|
+
for (let i = 0; i < 1 << str.length; i++) {
|
168
|
+
|
169
|
+
let subset = "";
|
170
|
+
|
171
|
+
for (let j = 0; j < str.length; j++) {
|
172
|
+
|
173
|
+
if (i & (1 << j)) {
|
174
|
+
|
175
|
+
subset += str[j];
|
176
|
+
|
177
|
+
}
|
178
|
+
|
179
|
+
}
|
180
|
+
|
181
|
+
results.push(subset);
|
182
|
+
|
183
|
+
}
|
184
|
+
|
185
|
+
return results;
|
186
|
+
|
187
|
+
};
|
188
|
+
|
189
|
+
```
|
190
|
+
|
191
|
+
の、 `if (i & (1 << j)) {` でやってる `&` や `<<` だったりが参考になるやもしれんね〜
|