二进制链表转整数
一、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)
};