您的位置:首页 > 其它

397. Integer Replacement

2017-12-31 18:00 393 查看
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 or n - 1.

What is the minimum number of replacements needed for n to become 1?

Example 1:

Input:
8

Output:
3

Explanation:
8 -> 4 -> 2 -> 1


Example 2:

Input:
7

Output:
4

Explanation:
7 -> 8 -> 4 -> 2 -> 1
or
7 -> 6 -> 3 -> 2 -> 1


思路:

3是个特例,因为对于3来说,通过+1去掉2个1,不如-1

各种运算都要换成bit的才行,/2 %2之类的

class Solution {
public int integerReplacement(int n) {
int res = 0;
while(n != 1)
{
if((n & 1) == 0)
n >>>=1;
else if(n == 3 || ((n>>>1) & 1) == 0)
n--;
else
n++;

res++;

}

return res;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: