檢查 Python 中數字的位數是否按遞增順序具有連續設定位的計數
假設我們有一個正數 n,我們必須檢查給定數字 n 的位模式中連續 1 的計數是否從左到右遞增。
因此,如果輸入類似於 n = 1775,則輸出將為 True,因為 n 的二進位制表示形式為 11011101111,所以連續 1 的數量為 [2, 3, 4],它們是遞增的
要解決此問題,我們將遵循以下步驟:
- bits_pattern := n 的位的新列表
- bit_count := bits_pattern 的大小
- p_cnt := 0,c_cnt := 0
- i := 0
- 當 i < bit_count 時,執行
- 如果 bits_pattern[i] 與 1 相同,則
- c_cnt := c_cnt + 1,i := i + 1
- 否則,當 bits_pattern[i - 1] 為 0 時,則
- i := i + 1,c_cnt := 0
- 轉到下一次迭代
- 否則,
- 如果 c_cnt < p_cnt,則
- 返回 0
- i := i + 1,p_cnt := c_cnt,c_cnt := 0
- 如果 c_cnt < p_cnt,則
- 如果 bits_pattern[i] 與 1 相同,則
- 如果 p_cnt > c_cnt 且 c_cnt 不為 0,則
- 返回 False
- 返回 True
讓我們看看以下實現以獲得更好的理解:
示例
def solve(n): bits_pattern = list(bin(n)) bit_count = len(bits_pattern) p_cnt = 0 c_cnt = 0 i = 0 while i < bit_count: if bits_pattern[i] == '1': c_cnt += 1 i += 1 elif bits_pattern[i - 1] == '0': i += 1 c_cnt = 0 continue else: if c_cnt < p_cnt: return 0 i += 1 p_cnt = c_cnt c_cnt = 0 if p_cnt > c_cnt and c_cnt != 0: return False return True n = 1775 print(solve(n))
輸入
1775
輸出
True
廣告