LeetCode每日一題:1290.二進制鏈表轉整數(九十二)

二進制鏈表轉整數

一、LeetCode題解

瞧一瞧~

二、算法題

題目

給你一個單鏈表的引用結點 head。鏈表中每個結點的值不是 0 就是 1。已知此鏈表是一個整數數字的二進制表示形式。

請你返回該鏈表所表示數字的 十進制值 。

示例 1:

輸入:head = [1,0,1]
輸出:5
解釋:二進制數 (101) 轉化爲十進制數 (5)

示例 2:

輸入:head = [1,0,0,1,0,0,1,1,1,0,0,0,0,0,0]
輸出:18880

解法一 (遍歷累加)

思路

任意一個數,我們以三位數爲例,比如一個三位數abc,它的十進制的值是規律爲:

  • a*10*10 + b*10 + c*1

  • 思考得出:node.val * (10^ n)累加起來🚨,這樣太繁瑣,我們嘗試對規律進行拆分。

  • a*10*10 + b*10 + c*1 => (a*10 + b)*10 +c 每一位都較後一位多了10倍即可。

  • 這就是遍歷和累加的過程

代碼

var getDecimalValue = function(head) {
    var current = head
    var num = 0
    while(current){
        num = num * 2 + current.val;
        current = current.next
    }
    return num
};

結果

在這裏插入圖片描述

解法二 (parseInt()方法)

思路

  • 遍歷將鏈表轉成二進制數
  • 利用api轉成10進制

代碼

var getDecimalValue = function(head) {
    var current = head
    var str = ''
    while(current){
        str += current.val;
        current = current.next
    }
    return parseInt(str, 2)
};

結果

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章