位运算状态压缩

位运算状态压缩:


用法:有几把钥匙就用几个二进制位来表示,对于每一把钥匙如果手里有就用1来表示,没有就用0表示。比如题中一共有4把钥匙,现在我们手里有1、3把钥匙,于是现在的钥匙状态就是1010。


1、判断是否有第n把钥匙

假如现在钥匙状态是1101,询问是否有第2把钥匙。

做法:首先1<<2,变成0100,即查询第二把钥匙。然后与1101进行与运算,结果为0100。如果这个结果值为0,说明没有这把钥匙,如果不为0,说明有。


2、判断现有钥匙是否能开锁

假如现在钥匙有三把,为1101,要开两把锁,为1001。

做法:1101与1001进行与运算,如果等于锁,则可以把锁全部打开。


3、加入钥匙

做法:先左移,再与原钥匙状态进行或运算。比如原来钥匙已有1001,加入第3把钥匙,就用1001和1<<1(即0010)进行或运算。用或运算而不是在原来的状态上直接加的原因是:可能之前已经有这把钥匙了,若现在又拾取这把钥匙,则状态不应该发生变化。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值