সমস্যা বিবরণ
একটি সিংলি-লিংকড লিস্টের হেড রেফারেন্স দেওয়া আছে। প্রতিটি নোডের মান ০ বা ১। এই লিস্টটি একটি সংখ্যার বাইনারি রিপ্রেজেন্টেশন ধারণ করে। এর দশমিক মান রিটার্ন করতে হবে।
উদাহরণ: লিস্ট [1,0,1,1,0,1] হলে আউটপুট ৪৫।
সমাধানের ধাপসমূহ
- লিস্ট এলিমেন্টগুলো ভেক্টরে কনভার্ট করুন।
- ভেক্টর রিভার্স করুন।
- ans := 0, temp := 1
- i = 0 থেকে size-1 পর্যন্ত: ans += x[i] * temp; temp *= 2
- ans রিটার্ন করুন।
C++ কোড উদাহরণ
#include <bits/stdc++.h>
using namespace std;
class ListNode {
public:
int val;
ListNode *next;
ListNode(int data) { val = data; next = NULL; }
};
ListNode* make_list(vector<int> v) {
ListNode* head = new ListNode(v[0]);
for (int i = 1; i < v.size(); i++) {
ListNode* ptr = head;
while (ptr->next != NULL) ptr = ptr->next;
ptr->next = new ListNode(v[i]);
}
return head;
}
class Solution {
public:
vector<int> getVector(ListNode* node) {
vector<int> result;
while (node) {
result.push_back(node->val);
node = node->next;
}
return result;
}
int getDecimalValue(ListNode* head) {
vector<int> x = getVector(head);
reverse(x.begin(), x.end());
int ans = 0, temp = 1;
for (int i = 0; i < x.size(); i++) {
ans += x[i] * temp;
temp *= 2;
}
return ans;
}
};
int main() {
Solution ob;
vector<int> v = {1,0,1,1,0,1};
ListNode* head = make_list(v);
cout << ob.getDecimalValue(head);
}
ইনপুট
[1,0,1,1,0,1]
আউটপুট
45