LeetCode—1290.二进制链表转整数(Java)
文章目錄
- 1.題目:
- 2.代碼實例
- 3.代碼分析
1.題目:
給你一個單鏈表的引用結(jié)點 head。鏈表中每個結(jié)點的值不是 0 就是 1。已知此鏈表是一個整數(shù)數(shù)字的二進(jìn)制表示形式。
請你返回該鏈表所表示數(shù)字的 十進(jìn)制值 。
示例 1:
輸入:head = [1,0,1]
輸出:5
解釋:二進(jìn)制數(shù) (101) 轉(zhuǎn)化為十進(jìn)制數(shù) (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
提示:
鏈表不為空。
鏈表的結(jié)點總數(shù)不超過 30。
每個結(jié)點的值不是 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.代碼分析
在做分析之前我們要先了解一下什么叫做位運(yùn)算,以及位運(yùn)算的使用方法
a shl b就表示把a(bǔ)轉(zhuǎn)為二進(jìn)制后左移b位(在后面添b個0)。例如100的二進(jìn)制為1100100,而110010000轉(zhuǎn)成十進(jìn)制是400,那么100 shl 2 = 400。可以看出,a shl b的值實際上就是a乘以2的b次方,因為在二進(jìn)制數(shù)后添一個0就相當(dāng)于該數(shù)乘以2。
那么我們這道題已經(jīng)是二進(jìn)制的形式了,就可以直接使用了
下面我們以101來作為例子分析
第一輪:
ans=0
ans<<=1之后的結(jié)果為ans=0(1*2的0次冪)
我們?nèi)〕鰜淼墓?jié)點是1
ans += cur.val之后的結(jié)果為ans=0+1=1
cur = cur.next之后的結(jié)果為0
二進(jìn)制變化的演示:
ans一開始是0
左移1之后變?yōu)?00
加上cur.val之后變?yōu)?00+1=01
第二輪:
ans=1
ans<<=1之后的結(jié)果為ans=2(1*2的1次冪)
我們?nèi)〕鰜淼墓?jié)點是0
ans += cur.val之后的結(jié)果為ans=2+0=2
cur = cur.next之后的結(jié)果為1
二進(jìn)制變化的演示:
ans為:01
左移之后變?yōu)?010
加上cur.val之后變?yōu)?010+0=010
第三輪:
ans=2
ans<<=1之后的結(jié)果為ans=4(2*2的1次冪)
我們?nèi)〕鰜淼墓?jié)點是1
ans += cur.val之后的結(jié)果為ans=4+1=2
cur = cur.next之后的結(jié)果為null
二進(jìn)制變化的演示:
ans為:010
左移之后變?yōu)?0100
加上cur.val之后變?yōu)?0100+1=0101
總結(jié)
以上是生活随笔為你收集整理的LeetCode—1290.二进制链表转整数(Java)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Bootstrap4 .ml-auto元
- 下一篇: Java 洛谷 P1089 津津的储蓄计