6365. 将整数减少到零需要的最少操作数

发布于 2023-02-19  83 次阅读


6365. 将整数减少到零需要的最少操作数]

难度

  • Easy
  • Medium
  • Hard

思路

虽然分类是 Easy ,但确实花了点时间。

对于涉及到 2 的幂的题目,直接从十进制角度考虑是比较费事的。在这个思路上碰壁之后,我尝试在二进制形式上找规律。随后发现,本题要做的,就是在有连续 1 的地方加上一个 1 (要考虑进位),计一个操作数,直到数字中只有离散 1 ,每个 1 计一个操作数,最后返回即可。

代码

class Solution:
    def minOperations(self, n: int) -> int:
        queue = []
        ans = 1
        while n:
            queue.append(n & 1)
            n >>= 1
            while queue and queue[0] == 0:
                queue.pop(0)
            if len(queue) == 2:
                if queue[1] == 1:
                    n += 1
                ans += 1
                queue = []
        return ans