文章目录

  • 1.题目:
  • 2.代码实例
  • 3.代码分析

1.题目:

给你一个单链表的引用结点 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。

2.代码实例

class Solution {public int getDecimalValue(ListNode head) {ListNode cur = head;int ans = 0;while (cur != null) {ans <<= 1;ans += cur.val;cur = cur.next;}return ans;}
}

3.代码分析

在做分析之前我们要先了解一下什么叫做位运算,以及位运算的使用方法

a shl b就表示把a转为二进制后左移b位(在后面添b个0)。例如100的二进制为1100100,而110010000转成十进制是400,那么100 shl 2 = 400。可以看出,a shl b的值实际上就是a乘以2的b次方,因为在二进制数后添一个0就相当于该数乘以2。

那么我们这道题已经是二进制的形式了,就可以直接使用了

下面我们以101来作为例子分析
第一轮:
ans=0
ans<<=1之后的结果为ans=0(1*2的0次幂)
我们取出来的节点是1
ans += cur.val之后的结果为ans=0+1=1
cur = cur.next之后的结果为0

二进制变化的演示:

ans一开始是0
左移1之后变为:00
加上cur.val之后变为:00+1=01

第二轮:
ans=1
ans<<=1之后的结果为ans=2(1*2的1次幂)
我们取出来的节点是0
ans += cur.val之后的结果为ans=2+0=2
cur = cur.next之后的结果为1

二进制变化的演示:

ans为:01
左移之后变为:010
加上cur.val之后变为:010+0=010

第三轮:
ans=2
ans<<=1之后的结果为ans=4(2*2的1次幂)
我们取出来的节点是1
ans += cur.val之后的结果为ans=4+1=2
cur = cur.next之后的结果为null

二进制变化的演示:

ans为:010
左移之后变为:0100
加上cur.val之后变为:0100+1=0101

LeetCode—1290.二进制链表转整数(Java)相关推荐

  1. LeetCode 1290. 二进制链表转整数

    1. 题目 给你一个单链表的引用结点 head. 链表中每个结点的值不是 0 就是 1. 已知此链表是一个整数数字的二进制表示形式. 请你返回该链表所表示数字的 十进制值 . 示例 1: 输入:hea ...

  2. leetcode —— 1290. 二进制链表转整数

    给你一个单链表的引用结点 head.链表中每个结点的值不是 0 就是 1.已知此链表是一个整数数字的二进制表示形式. 请你返回该链表所表示数字的 十进制值 . 示例 1: 输入:head = [1,0 ...

  3. LeetCode 1290 二进制链表转整数

    原题链接 解题思路,二进制转十进制模拟法 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode ...

  4. LeetCode篇之链表:1290(二进制链表转整数)

    LeetCode篇之链表:1290-->二进制链表转整数 1290. 二进制链表转整数 题目: 解题思路: 源码: 改进: 踩坑点: 1290. 二进制链表转整数 题目: 解题思路: 1.先遍历 ...

  5. LeetCode Algorithm 1290. 二进制链表转整数

    1290. 二进制链表转整数 Ideas 偷了个懒,首先用string类型的str把链表的所有元素都串起来,然后直接用stoi转成int类型,直接AC. Code C++ #include <s ...

  6. 1290. 二进制链表转整数

    2020-03-17 1.题目描述 二进制链表转整数 2.题解 乘2使用位操作 3.代码 #include <iostream> #include <algorithm> us ...

  7. LeetCode刷题(154)~二进制链表转整数

    题目描述 给你一个单链表的引用结点 head.链表中每个结点的值不是 0 就是 1.已知此链表是一个整数数字的二进制表示形式. 请你返回该链表所表示数字的 十进制值 . 示例 1: 输入:head = ...

  8. leetcode1290. 二进制链表转整数 刷新认知,最简单算法题

    给你一个单链表的引用结点 head.链表中每个结点的值不是 0 就是 1.已知此链表是一个整数数字的二进制表示形式. 请你返回该链表所表示数字的 十进制值 . 示例 1: 输入:head = [1,0 ...

  9. C练题笔记之:Leetcode-1290. 二进制链表转整数

    这题没啥好说的,位运算就行了. 题目: 结果:(不知道为啥速度才37.58呢,大佬是咋做的哟) 代码: /*** Definition for singly-linked list.* struct ...

最新文章

  1. Qt 调试Caffe
  2. 一个工具类实现自定义Tablayout的下划线宽度
  3. 工具系列——COMSOL Multiphysics 5.5安装教程
  4. 最小二乘法(least squares)的曲线拟合(curve fitting)
  5. C++编程常见问题—error: passing ‘const std::map<>]‘ discards qualifiers
  6. php加图片源码_php给现有的图片加文字水印代码
  7. 创业之路 - 人脉关系 VS 人际关系
  8. 数据投毒攻防对抗技术-2.推荐系统中的数据投毒
  9. 安卓/苹果手机直播声卡方案,实现一边直播一边充电功能
  10. word小技巧--怎么去掉Word文档封面页码的方法
  11. JAVA Stream的collect用法与原理(详解)
  12. eclipse开发android入门学习
  13. 用python制作文字特效
  14. 荷兰高性能输出服务器,荷兰服务器国内访问慢,怎么加速?
  15. 脱欧协议在英议会遇惨败:首相面临逼宫 欧盟表遗憾
  16. haproxy中的Proxies段的配置
  17. google语音服务注意事项
  18. wifiwan口速率什么意思_无线路由器WAN口状态的意思是什么?
  19. 后端ut测试(精选)
  20. C++轻量级跨平台桌面GUI库FLTK的简单使用

热门文章

  1. LauncherApplication
  2. Windows MDL原理总结
  3. matlab中怎么给符号变量赋值
  4. socket开发:一台服务器同一端口同时在多个网卡上开启listen的误区理解。
  5. docker 删除所有容器和镜像的命令
  6. Shell脚本大量示例
  7. Boost.Asio技术文档汇总
  8. 虚拟币交易平台开发_虚拟币软件开发未来发展的趋势怎么样?
  9. python查询代码可循环执行_还在用鼠标进行着重复的操作?几行python代码帮你搞定!!...
  10. 自建web3 provider服务