位运算状态压缩

    xiaoxiao2025-10-11  6

    位运算状态压缩:

    用法:有几把钥匙就用几个二进制位来表示,对于每一把钥匙如果手里有就用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)进行或运算。用或运算而不是在原来的状态上直接加的原因是:可能之前已经有这把钥匙了,若现在又拾取这把钥匙,则状态不应该发生变化。

    转载请注明原文地址: https://ju.6miu.com/read-1303058.html
    最新回复(0)