ধরুন আমাদের একটি সংখ্যা সংখ্যা আছে। 0 ≤ i ≤ num রেঞ্জের প্রতিটি সংখ্যার জন্য আমাদের তাদের বাইনারি কাউন্টারপার্টে 1 এর সংখ্যা গণনা করতে হবে এবং তাদের একটি তালিকা হিসাবে ফেরত দিতে হবে। সুতরাং যদি সংখ্যাটি 5 হয়, তাহলে সংখ্যাগুলি হল [0, 1, 2, 3, 4, 5], এবং এই সংখ্যাগুলির মধ্যে 1 এর সংখ্যা হল [0, 1, 1, 2, 1, 2], তাই এটি হবে রিটার্ন 7.
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
res :=একটি অ্যারে যা 0s এর num + 1 সংখ্যা ধারণ করে
-
অফসেট :=0
-
1 থেকে num + 1
রেঞ্জের মধ্যে i এর জন্য-
যদি i এবং i − 1 =0, তাহলে res[i] :=1 এবং অফসেট :=0
-
অন্যথায় 1 এবং res[i] :=1 + res[অফসেট]
দ্বারা অফসেট বাড়ান
-
-
res এর উপাদানগুলির যোগফল ফেরত দিন
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
class Solution: def countBits(self, num): result = [0] * (num+1) offset = 0 for i in range(1,num+1): if i & i-1 == 0: result[i] = 1 offset = 0 else: offset+=1 result[i] = 1 + result[offset] return sum(result) ob1 = Solution() print(ob1.countBits(5))
ইনপুট
5
আউটপুট
7