给定一个正整数 n,你可以做如下操作:
- 如果 n 是偶数,则用 n / 2替换 n。
- 如果 n 是奇数,则可以用 n + 1或n - 1替换 n。
n 变为 1 所需的最小替换次数是多少?
示例 1:
输入:
8
输出:
3
解释:
8 -> 4 -> 2 -> 1
示例 2:
输入:
7
输出:
4
解释:
7 -> 8 -> 4 -> 2 -> 1
或
7 -> 6 -> 3 -> 2 -> 1
/*
* @lc app=leetcode.cn id=397 lang=cpp
*
* [397] 整数替换
*/
// @lc code=start
class Solution {
public:
int integerReplacement(int n) {
int count = 0;
if (n == (0xffffffff / 2)) //避免int溢出 当然这里也可以转换成 long long类型
{
n = n - 1;
}
while (n > 1)
{
if (n % 2 == 0) // n % 4等于0或2
n >>= 1;
else if (n == 3)
n--;
else
n += (n % 4 - 2); // n % 4等于1或3 这里的目的是为了连续除2
count++;
}
return count;
}
};
// @lc code=end