假设我们有一个正整数n,我们可以按照以下步骤进行这些操作-
如果n为偶数,则将n替换为n / 2。
如果n为奇数,则可以将n替换为n + 1或n-1。
我们必须找到n变为1所需的最小替换数?
因此,如果数字为7,则答案将为4,例如7→8→4→2→1或7→6→3→2→1
为了解决这个问题,我们将遵循以下步骤-
ret:= 0,n:= x
当n> 1时
如果n为3或n / 2为偶数,则将n减1,否则将n加1
如果n是偶数,则c:= n / 2
否则当n为偶数时
增加ret 1
返回ret。
让我们看下面的实现以更好地理解-
#include <bits/stdc++.h> using namespace std; typedef long long int lli; class Solution { public: int bitCount(int x){ int ret = 0; while(x){ ret++; x >>= 1; } return ret; } int integerReplacement(int x) { int ret = 0; lli n = x; while(n > 1){ if(n % 2 == 0){ n >>= 1; } else if(n & 1){ if(n == 3 || (((n >> 1) & 1 )== 0)){ n--; } else { n++; } } ret++; } return ret; } }; main(){ Solution ob; cout << (ob.integerReplacement(7)); }
7
输出结果
4