假设我们有一个正数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