在 Python 中检查数字的位是否按递增顺序具有连续设置位数
pythonserver side programmingprogramming更新于 2024/3/21 14:26:00
假设我们有一个正数 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