您的位置:首页 > 其它

LeetCode Integer Replacement

2016-10-26 08:39 302 查看
题意:给出一个正数n,如果n为偶数则n = n /2,如果n为奇数,则n=n + 1或者n=n-1,求其变为1所需要的最少步数。

思路:刚开始用记忆化的dp,当数值比较大时,提示栈溢出。在判断是n=n+1或者n=n-1时总是选择结果位为1最小的操作

代码如下:

public class Solution
{
public int integerReplacement(int n)
{
int ans = 0;

while (n != 1)
{
if ((n & 1) == 0) n >>>= 1;
else
{
if (n == 3 || Integer.bitCount(n + 1) > Integer.bitCount(n - 1))
{
--n;
}
else ++n;
}
ans++;
}

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