สมมติว่าเรามีรายการที่เชื่อมโยงกัน รายการที่เชื่อมโยงเป็นเลขฐานสองที่มีตัวเลขที่สำคัญที่สุดก่อน เราต้องคืนค่าเป็นเลขฐานสิบ
ดังนั้นหากอินพุตเท่ากับ [1,0,1,1,0] เอาต์พุตจะเป็น 22
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- l :=รายการใหม่
- ในขณะที่โหนดไม่เป็นโมฆะให้ทำ
- ใส่ค่าของโหนดที่ส่วนท้ายของ l
- โหนด:=ถัดไปของโหนด
- k :=0, v:=0
- สำหรับฉันในช่วงขนาด l - 1 ถึง 0, ลดลง 1 ทำ
- ถ้า l[i] เหมือนกับ 1 แล้ว
- v :=v + 2^k
- k :=k + 1
- ถ้า l[i] เหมือนกับ 1 แล้ว
- รีเทิร์นวี
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
class ListNode: def __init__(self, data, next = None): self.val = data self.next = next def make_list(elements): head = ListNode(elements[0]) for element in elements[1:]: ptr = head while ptr.next: ptr = ptr.next ptr.next = ListNode(element) return head class Solution: def solve(self, node): l = [] while node: l.append(node.val) node=node.next k = 0 v=0 for i in range(len(l)-1,-1,-1): if (l[i]==1): v += (2**k) k+=1 return v ob = Solution() head = make_list([1,0,1,1,0]) print(ob.solve(head))
อินพุต
[1,0,1,1,0]
ผลลัพธ์
22