题目链接
英文链接:https://leetcode.com/problems/integer-replacement/
中文链接:https://leetcode-cn.com/problems/integer-replacement/
题目详述
给定一个正整数 n,你可以做如下操作:
如果 n 是偶数,则用
n / 2
替换 n。如果 n 是奇数,则可以用
n + 1
或n - 1
替换 n。n 变为 1 所需的最小替换次数是多少?
示例 1:
1 | 输入: |
示例 2:
1 | 输入: |
题目详解
- 奇数的计算方法已经固定了。
- 偶数有两种计算方法。通过观察模拟发现,当 n 的 最后的两个二进制位为
0b11
时,采用加一操作更好,否则采用减一操作更好。但是有一个例外,当 n 恰好等于0b11
时,采取减一操作更好。 - 注意
n == Integer.MAX_VALUE
的情况,应该采用无符号移位>>>
操作。
1 | public class LeetCode_00397 { |