一维指数型枚举
使用场景
- 给定n个水平方格
- 每个方格里面可以放1或0
- 那么所有存放的情况一共有 2 n 2^n 2n种
- 枚举出所有情况
二进制串的位运算结论
- 给定一个二进制串,如101011
- 从左到右可以规定其下标为:5 4 3 2 1 0
- 那么
43 >> 2 & 1
(返回1或0)可以判断:二进制串101011下标为2处的数字是否为1
通过二进制串的位运算进行一维指数型枚举
题目:
- 给定一个长度为6的一维数组 (元素为0或1)
- 枚举出所有情况,在数组元素为1的位置执行
turn()
方法
for (int op = 0; op < 1 << 6; op++) {
// 扫描二进制串
for (int i = 0; i < 6; i++) {
if ((op >> i & 1) == 1) turn(i);
}
}