0397:整数替换(★)
目录
题目
给定一个正整数 n
,你可以做如下操作:
- 如果
n
是偶数,则用n / 2
替换n
。 - 如果
n
是奇数,则可以用n + 1
或n - 1
替换n
。
返回 n
变为 1
所需的 最小替换次数 。
示例 1:
输入:n = 8 输出:3 解释:8 -> 4 -> 2 -> 1
示例 2:
输入:n = 7 输出:4 解释:7 -> 8 -> 4 -> 2 -> 1 或 7 -> 6 -> 3 -> 2 -> 1
示例 3:
输入:n = 4 输出:2
提示:
1 <= n <= 231 - 1
分析
#1
最简单的就是直接递归。
|
|
36 ms
#2
也可以用 bfs 遍历,与递归本质相同。
|
|
#3
- 还可以从二进制表示考虑
- 假如后两位是 01,减 1 更优
- 假如后两位是 11,加 1 更优(除了 3 的特殊情况)
解答
|
|
37 ms