LEETCODE 1290. Convert Binary Number in a Linked List to Integer 解题思路分析

题目大意:

二进制链表转整数

给你一个单链表的引用结点 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-解题思路分析/
此条目发表在leetcode分类目录,贴了, , , 标签。将固定链接加入收藏夹。

发表评论

您的电子邮箱地址不会被公开。