题目大意:
二进制链表转整数
给你一个单链表的引用结点 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
。
如果想查看本题目是哪家公司的面试题,请参考以下免费链接: https://leetcode.jp/problemdetail.php?id=1290
解题思路分析:
这是一道很简单的题目,只要知道如何将二进制转化为十进制的话即可解题。我们将二进制数的最低位看做是第0位,转化时,如果二进制当前位是1,那么就可以使用2的n次方将其转化为十进制。比如二进制数100,1在第2位,那么100就是2的2次方,即4。同理110等于2的2次方加上2的1次方,即6。
解题时,先循环一遍链表,查看总共的位数,然后再循环一遍链表,如果当前位是1,那么十进制结果加上2的n次方即可(n为当前位所在下标。最低位下标为0)。
实现代码:
public int getDecimalValue(ListNode head) { int count=0; // 查看总位数 ListNode root=head; while(root!=null){ count++; root=root.next; } int res=0; // 返回结果 int pow=count-1; // 将每一位转化为10进制,相加即为返回结果 while(head != null){ if(head.val==1){ res+= Math.pow(2,pow); } head=head.next; pow--; } return res; }
本题解法执行时间为0ms。
Runtime: 0 ms, faster than 100.00% of Java online submissions for Convert Binary Number in a Linked List to Integer.
Memory Usage: 34 MB, less than 100.00% of Java online submissions for Convert Binary Number in a Linked List to Integer.
本网站文章均为原创内容,并可随意转载,但请标明本文链接如有任何疑问可在文章底部留言。为了防止恶意评论,本博客现已开启留言审核功能。但是博主会在后台第一时间看到您的留言,并会在第一时间对您的留言进行回复!欢迎交流!
本文链接: https://leetcode.jp/leetcode-1290-convert-binary-number-in-a-linked-list-to-integer-解题思路分析/