在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