檢查 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
  • 如果 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

更新於:2020-12-30

295 次檢視

開啟你的職業生涯

透過完成課程獲得認證

開始
廣告