[leetcode]397. Integer Replacement

来源:互联网 发布:mac文件打包怎么做 编辑:程序博客网 时间:2024/06/04 18:14

题目链接:https://leetcode.com/problems/integer-replacement/


Given a positive integer n and you can do operations as follow:

  1. If n is even, replace n with n/2.
  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:8Output:3Explanation:8 -> 4 -> 2 -> 1

Example 2:

Input:7Output:4Explanation:7 -> 8 -> 4 -> 2 -> 1or7 -> 6 -> 3 -> 2 -> 1


方法一:

class Solution{public:    int integerReplacement(int n)    {        return getOne(n);    }    int getOne(int n)    {        if(n==INT32_MAX)            return 32;        else if(n==1)            return 0;        else if(n%2==0)            return getOne(n/2)+1;        else if(n%2!=0)            return min(getOne(n+1),getOne(n-1))+1;        return 0;    }};


方法二:

思路:

All you need is determine replace n with n + 1 or n - 1, when n is odd. since,

  • if n is even, you get no choice, just replace it with n / 2.
  • if n is odd, you can either add 1 or reduce 1.

If n + 1 % 4 == 0, replace n with n + 1 will short the path. Otherwise, replace n with n - 1 is always the right direction.


class Solution {public:    int integerReplacement(int n)    {        if (n == 1)            return res;        if (n == 3)        {            res += 2;            return res;        }        if (n == INT32_MAX)            return 32;        res ++;        if (n & 1)            if ((n + 1) % 4 == 0)                integerReplacement(n + 1);            else                integerReplacement(n - 1);        else            integerReplacement(n / 2);        return res;    }private:    int res = 0;};


原创粉丝点击