二進制鏈表轉整數
一、LeetCode題解
瞧一瞧~
- 博健的LeetCode題解:Gitbook版本傳送門
- 博健的LeetCode題解:CSDN傳送門
- 有趣的CSS:Gitbook傳送門
- 前端進階筆記:Gitbook傳送門
二、算法題
題目
給你一個單鏈表的引用結點 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)
};