สมมติว่าเรามีตัวเลข num สำหรับแต่ละตัวเลข i ในช่วง 0 ≤ i ≤ num เราต้องคำนวณจำนวนบิต 1 ในตัวแทนบाइनารีของมัน และคืนค่าผลรวมทั้งหมด
ตัวอย่าง: ถ้า num = 5 ตัวเลขคือ [0, 1, 2, 3, 4, 5] จำนวนบิต 1 คือ [0, 1, 1, 2, 1, 2] ผลรวมคือ 7
ขั้นตอนการแก้ปัญหา
- สร้างอาร์เรย์
resultขนาดnum + 1เติมด้วย 0 - กำหนด
offset = 0 - วนลูป
iจาก 1 ถึงnum:- ถ้า
i & (i - 1) == 0(เป็นกำลังของ 2) ให้result[i] = 1และoffset = 0 - อื่นๆ เพิ่ม
offsetขึ้น 1 และresult[i] = 1 + result[offset]
- ถ้า
- คืนค่าผลรวมของอิลิเมนต์ใน
result
ตัวอย่างโค้ด Python
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)) # Output: 7
อินพุต / เอาต์พุต
Input: 5
Output: 7