Python入門進階篇 No.10 —— 文字檔案的讀取_二進位制檔案的讀取和寫入
阿新 • • 發佈:2021-02-03
題目描述
給你一個單鏈表的引用結點 head。連結串列中每個結點的值不是 0 就是 1。已知此連結串列是一個整數數字的二進位制表示形式。
請你返回該連結串列所表示數字的 十進位制值 。
示例 1:
輸入:head = [1,0,1]
輸出:5
解釋:二進位制數 (101) 轉化為十進位制數 (5)
示例 2:
輸入:head = [0]
輸出:0
示例 3:
輸入:head = [1]
輸出:1
示例 4:
輸入:head = [1,0,0,1,0,0,1,1,1,0,0,0,0,0,0]
輸出:18880
示例 5:
輸入:head = [0,0]
輸出:0
提示:
連結串列不為空。 連結串列的結點總數不超過 30。 每個結點的值不是 0 就是 1。
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/convert-binary-number-in-a-linked-list-to-integer
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
思考
第一種方法是自己想的,直接將連結串列反轉,然後進行二進位制轉換。效率比較低。
第二種方法是剽竊的大佬的。只能說大佬NB
程式碼
第一種方法
int getDecimalValue(struct ListNode* head){
struct ListNode* prev = NULL;
struct ListNode* curr = head;
while (curr) {
struct ListNode* next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
int sum=0;
int i=1;
while(prev){
sum=sum+(prev->val)*i;
i=i*2;
prev=prev->next;
}
return sum;
}
第二種方法是用C++語言
class Solution {
public:
int getDecimalValue(ListNode* head) {
ListNode* cur = head;
int ans = 0;
while (cur != nullptr) {
ans = ans * 2 + cur->val;
cur = cur->next;
}
return ans;
}
};