สมมติว่าเรามีอาร์เรย์ A เป็น 0 และ 1 วินาที ให้พิจารณาว่า N[i] เป็นอาร์เรย์ย่อยที่ i จากดัชนี A[0] ถึง A[i] ที่ตีความว่าเป็นเลขฐานสอง เราต้องหารายการคำตอบแบบบูลีน โดยที่ answer[i] เป็นจริงก็ต่อเมื่อ N[i] หารด้วย 5 ลงตัวเท่านั้น
ดังนั้น หากอินพุตเป็น [0,1,1,1,1,1,1] ผลลัพธ์จะเป็น [true,false,false,false,true,false]
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- ความยาว :=ขนาด A
- ans:=สร้างอาร์เรย์ของความยาวขนาด และเติมเท็จ
- number:=ค่าไบนารีโดยเชื่อมแต่ละองค์ประกอบจาก A
- สำหรับฉันในช่วง 0 ถึงความยาว ทำ
- ถ้า mod 5 เท่ากับ 0 แล้ว
- ans[length-i-1] :=จริง
- หมายเลข:=หมายเลข / 2
- ถ้า mod 5 เท่ากับ 0 แล้ว
- คืนสินค้า
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
class Solution: def prefixesDivBy5(self, A): length=len(A) ans=[False]*length number=int("".join(map(str,A)),2) for i in range(length): if number%5==0: ans[length-i-1]=True number=number>>1 return ans ob = Solution() print(ob.prefixesDivBy5([0,1,1,1,1,1]))
อินพุต
[0,1,1,1,1,1]
ผลลัพธ์
[True, False, False, False, True, False]