位運算狀態壓縮

位運算狀態壓縮:


用法:有幾把鑰匙就用幾個二進制位來表示,對於每一把鑰匙如果手裏有就用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)進行或運算。用或運算而不是在原來的狀態上直接加的原因是:可能之前已經有這把鑰匙了,若現在又拾取這把鑰匙,則狀態不應該發生變化。


發佈了47 篇原創文章 · 獲贊 43 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章