用 C++ 實現整數替換


假設我們有一個正整數 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

  • while n > 1

    • 如果 n 為偶數,則 c := n / 2

    • 否則當 n 為偶數時

      • 如果 n 為 3 或 n/2 為偶數,則將 n 減 1,否則將 n 加 1

    • 將 ret 加 1

  • 返回 ret。

示例 (C++)

讓我們看看以下實現以獲得更好的理解 −

 線上演示

#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

更新於: 2020 年 5 月 2 日

581 次瀏覽

開啟你的職業

完成課程以取得認證

開始
廣告
© . All rights reserved.