题目链接: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