leetcode刷刷題(27) ---- 二進制鏈表轉整數(C語言版)

2020-2-2

  • One has to be fair and very honest.
    要做一個正直的人。

題目

在這裏插入圖片描述

給你一個單鏈表的引用結點 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
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

個人解答:(C版本)

  • 思路很簡單,就是獲取鏈表元素中的每個值,然後按照二進制轉十進制的方法轉換即可
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
// 求解2的n次冪結果
int power_2(int n)
{
    int val=1;
    for(int i=0; i<n; i++)
    {
        val *= 2;
    }
    return val;
}

int getDecimalValue(struct ListNode* head){

    struct ListNode *q = head;
    int num_dec = 0;
    int len=0;
    if(q == NULL)
        return 0;
    // 獲取鏈表長度
    while(q != NULL)
    {
       len++;
       q=q->next; 
    }

    q = head;
    while(q != NULL)
    {
       len--;
       if(q->val == 1)
       {
          num_dec+= power_2(len); // 從最高次冪開始累加
       }
       q=q->next; 
    }

    return num_dec;
}
  • 結果:
    在這裏插入圖片描述
他山之石:
  • 我的方法搞複雜了,參考了官方題解,使用C語言重寫如下:
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */

int getDecimalValue(struct ListNode* head){

    struct ListNode *q = head;
    int num_dec = 0;

    if(q == NULL)
        return 0;

    q = head;
    while(q != NULL)
    {
       num_dec= num_dec*2 + q->val; // 從最高次冪開始累加
       q=q->next; 
    }

    return num_dec;
}
發佈了251 篇原創文章 · 獲贊 168 · 訪問量 31萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章