题目:
Given a positive integer n and you can do operations as follow:
- If n is even, replace n with
n/2
. - If n is odd, you can replace n with either
n + 1
orn - 1
.
What is the minimum number of replacements needed for n to become 1?
题解:先讨论几个特殊情况,将其解决,再讨论一般情况,易知如果一个数是4的倍数,则所需次数最少,所以分奇偶讨论,奇数时往4的倍数上递归则可。偶数除2即可,将一个数变为最近的4的倍数,将其后两位变为0则可。
代码:
int integerReplacement(int n) {
int i;
if(n==INT_MAX) return 32;
for (i = 0; n > 1; i++) {
if (n < 4)
n--;
else if (n & 1)
n = (n + 1) >> 2 << 2;
else
n >>= 1;
}
return i;
}