1. 程式人生 > 其它 >Python入門進階篇 No.10 —— 文字檔案的讀取_二進位制檔案的讀取和寫入

Python入門進階篇 No.10 —— 文字檔案的讀取_二進位制檔案的讀取和寫入

技術標籤:LeetCode連結串列單鏈表

題目描述

給你一個單鏈表的引用結點 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;
    }
};