397. 整数替换

exiaohu 于 2021-11-19 发布

题目链接:397. 整数替换

广度优先搜索。

数学上,任意正整数都可以从 $1$ 出发,进行加一减一乘以二三种操作生成。

class Solution:
    def integerReplacement(self, n: int) -> int:
        states, step = {n}, 0

        while True:
            if 1 in states:
                return step

            next_states, step = set(), step + 1

            for num in states:
                if num & 1 == 0:
                    next_states.add(num // 2)
                else:
                    next_states.add(num + 1)
                    next_states.add(num - 1)
            states = next_states