สมมติว่าเรามีจำนวนเต็มบวก 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 เป็นเลขคู่ ดังนั้น c :=n / 2
-
มิฉะนั้นเมื่อ n เป็นคู่
-
ถ้า n เป็น 3 หรือ n/2 เป็นเลขคู่ ให้ลด n ขึ้น 1 ไม่เช่นนั้น ให้เพิ่ม n ขึ้น 1
-
-
เพิ่มขึ้น 1
-
-
รีเทิร์น.
ตัวอย่าง (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