ধরুন আমাদের একটি ধনাত্মক পূর্ণসংখ্যা 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 দ্বারা 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