在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

  • 当我<位计数,

    • 如果c_cnt <p_cnt,则

    • i:= i + 1,p_cnt:= c_cnt,c_cnt:= 0

    • 返回0

    • i:= i + 1,c_cnt:= 0

    • 进行下一次迭代

    • c_cnt:= c_cnt + 1,i:= i + 1

    • 如果bits_pattern [i]与1相同,则

    • 否则,当bits_pattern [i-1]为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

    猜你喜欢