Cho danh sách liên kết đơn biểu diễn số nhị phân (bit quan trọng nhất ở đầu), chuyển đổi thành số thập phân.
Ví dụ
Đầu vào: [1,0,1,1,0].
Đầu ra: 22.
Thuật toán
- Duyệt danh sách liên kết, thu thập bit vào mảng
l. - Khởi tạo
k=0, v=0. - Duyệt
ltừ cuối về đầu: nếu bit == 1,v += 2^k;k++. - Trả về
v.
Mã nguồn Python
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))
Đầu vào / Đầu ra
Input: [1,0,1,1,0]
Output: 22