当前位置:首页 > 力扣 > 线性遍历+二进制 6行代码征服二进制链表转整数

线性遍历+二进制 6行代码征服二进制链表转整数

2周前 (05-17)

力扣1290.二进制链表转整数

线性遍历+二进制 6行代码征服二进制链表转整数 算法 C++ 迭代 模拟 进制转换 链表 单链表 数据结构 第1张

题目本质

给定一个单链表的头节点head,链表中每个节点的值为0或1。链表表示一个‌最高有效位在前‌的二进制数字,要求将其转换为对应的十进制整数。例如链表1→0→1对应的二进制数是101,应返回十进制数5。


解题思路与推导过程

一、算法核心思想

  1. ‌1.二进制数构造规则‌:

    • 每个新节点的值相当于二进制数‌向左移位‌后的最低位

    • 例如遍历到第三个节点时,计算过程相当于(前值<<1) | 当前值

  2. ‌2.累加计算‌:

    • 初始化sum=0作为累加结果

    • 每次循环执行sum = sum*2 + 当前节点值(等价于位运算sum<<1 | val

  3. 3‌.遍历特性‌:

    • 无需反转链表,直接按照遍历顺序处理

    • 时间复杂度O(n),空间复杂度O(1)

二、代码流程解析

  • ‌1.初始化‌:sum=0作为十进制结果的容器

  • ‌2.循环处理每个节点‌:

    1. sum = sum*2:将之前的结果左移一位(二进制进位)

    2. +head->val:将当前位的二进制值加入最低位

    3. head=head->next指针后移处理下一位

  • 3‌.终止条件‌:链表指针指向NULL时结束遍历

三、潜在问题与解决方案

  • 大数溢出‌:使用long long类型存储中间结果(题目保证链表长度≤30,long long足够存储2^30量级的数值)

  • 头节点为空的边界情况‌:题目约束链表非空,无需额外判断1


代码+注释

class Solution {
public:
    int getDecimalValue(ListNode* head) {
        long long sum=0; // 使用long long避免中间计算溢出
        while(head)      // 遍历直到链表末尾
        {
            // 核心计算公式:每次将之前结果左移一位,并加上当前二进制位
            sum = (long long)sum*2 + head->val; 
            
            // 类型转换说明:防止sum超过int范围时的计算错误
            head = head->next; // 指针后移处理下个节点
        }
        return sum; // 最终结果自动转为int(题目保证数值在int范围内)
    }
};


原创内容 转载请注明出处

分享给朋友:

相关文章

力扣198.打家劫舍|动态规划解法中的特殊边界处理

力扣198.打家劫舍|动态规划解法中的特殊边界处理

题意解析:在排列成直线的房屋群中,每个房屋藏有价值不同的财物。小偷不能连续抢劫相邻的两间房屋,否则会触发警报。我们需要设计一套抢劫策略,使得在不触发警报的前提下,能够获取的最大财物总和。这个问题本质上...

力扣451:ASCII数组计数法 用128个桶解决频率排序问题

力扣451:ASCII数组计数法 用128个桶解决频率排序问题

题目重解给定一个字符串,将字符按照出现频率降序排列。例如输入"tree",可能返回"eetr"或"eert"。题目要求我们不考虑字母顺序,只...

力扣740.删除并获得点数 预处理与动态规划的巧妙融合

力扣740.删除并获得点数 预处理与动态规划的巧妙融合

题意解析:给定一组数字,每当你选择一个数字x时,所有等于x-1和x+1的数字都会被自动移除。你需要通过巧妙的选择顺序,最大化获得的点数总和。这个问题可以转化为对离散化数字分布的动态规划问题——将相邻数...

力扣119题:从O(n²)到O(2n):杨辉三角高效空间优化

力扣119题:从O(n²)到O(2n):杨辉三角高效空间优化

题目重解:给定一个非负索引 rowIndex,返回杨辉三角的第 rowIndex 行。不同于生成整个杨辉三角,这道题要求我们只返回特定行,且空间复杂度应尽可能优化。例如输入3,需要返回[1,3,3,1...

力扣第1991题:寻找数组的中心索引 如何找到左右和相等的中心索引

力扣第1991题:寻找数组的中心索引 如何找到左右和相等的中心索引

题目解读给定一个整数数组,我们需要找到一个中心索引,使得该索引左侧所有元素的和等于右侧所有元素的和。如果不存在这样的索引,则返回-1。中心索引的定义不包含在左右两侧的和计算中。这个问题考察对数组遍历和...

力扣35:二分法在搜索插入位置中的运用

力扣35:二分法在搜索插入位置中的运用

有序数组的定位在一个严格递增的数字序列中,每个元素都有其确定的位置。当新元素试图加入时,我们需要回答两个问题:它是否已经存在?如果不存在,它应该插入在哪里?这道题要求我们在O(log n)时间内完成这...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。