LeetCode Integer Replacement

来源:互联网 发布:网络骑士 所有作品集 编辑:程序博客网 时间:2024/05/29 02:12

题意:给出一个正数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;    }}


0 0
原创粉丝点击