LeetCode—1290.二进制链表转整数(Java)
文章目录
- 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)相关推荐
- LeetCode 1290. 二进制链表转整数
1. 题目 给你一个单链表的引用结点 head. 链表中每个结点的值不是 0 就是 1. 已知此链表是一个整数数字的二进制表示形式. 请你返回该链表所表示数字的 十进制值 . 示例 1: 输入:hea ...
- leetcode —— 1290. 二进制链表转整数
给你一个单链表的引用结点 head.链表中每个结点的值不是 0 就是 1.已知此链表是一个整数数字的二进制表示形式. 请你返回该链表所表示数字的 十进制值 . 示例 1: 输入:head = [1,0 ...
- LeetCode 1290 二进制链表转整数
原题链接 解题思路,二进制转十进制模拟法 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode ...
- LeetCode篇之链表:1290(二进制链表转整数)
LeetCode篇之链表:1290-->二进制链表转整数 1290. 二进制链表转整数 题目: 解题思路: 源码: 改进: 踩坑点: 1290. 二进制链表转整数 题目: 解题思路: 1.先遍历 ...
- LeetCode Algorithm 1290. 二进制链表转整数
1290. 二进制链表转整数 Ideas 偷了个懒,首先用string类型的str把链表的所有元素都串起来,然后直接用stoi转成int类型,直接AC. Code C++ #include <s ...
- 1290. 二进制链表转整数
2020-03-17 1.题目描述 二进制链表转整数 2.题解 乘2使用位操作 3.代码 #include <iostream> #include <algorithm> us ...
- LeetCode刷题(154)~二进制链表转整数
题目描述 给你一个单链表的引用结点 head.链表中每个结点的值不是 0 就是 1.已知此链表是一个整数数字的二进制表示形式. 请你返回该链表所表示数字的 十进制值 . 示例 1: 输入:head = ...
- leetcode1290. 二进制链表转整数 刷新认知,最简单算法题
给你一个单链表的引用结点 head.链表中每个结点的值不是 0 就是 1.已知此链表是一个整数数字的二进制表示形式. 请你返回该链表所表示数字的 十进制值 . 示例 1: 输入:head = [1,0 ...
- C练题笔记之:Leetcode-1290. 二进制链表转整数
这题没啥好说的,位运算就行了. 题目: 结果:(不知道为啥速度才37.58呢,大佬是咋做的哟) 代码: /*** Definition for singly-linked list.* struct ...
最新文章
- Qt 调试Caffe
- 一个工具类实现自定义Tablayout的下划线宽度
- 工具系列——COMSOL Multiphysics 5.5安装教程
- 最小二乘法(least squares)的曲线拟合(curve fitting)
- C++编程常见问题—error: passing ‘const std::map<>]‘ discards qualifiers
- php加图片源码_php给现有的图片加文字水印代码
- 创业之路 - 人脉关系 VS 人际关系
- 数据投毒攻防对抗技术-2.推荐系统中的数据投毒
- 安卓/苹果手机直播声卡方案,实现一边直播一边充电功能
- word小技巧--怎么去掉Word文档封面页码的方法
- JAVA Stream的collect用法与原理(详解)
- eclipse开发android入门学习
- 用python制作文字特效
- 荷兰高性能输出服务器,荷兰服务器国内访问慢,怎么加速?
- 脱欧协议在英议会遇惨败:首相面临逼宫 欧盟表遗憾
- haproxy中的Proxies段的配置
- google语音服务注意事项
- wifiwan口速率什么意思_无线路由器WAN口状态的意思是什么?
- 后端ut测试(精选)
- C++轻量级跨平台桌面GUI库FLTK的简单使用