leetcode菜雞鬥智鬥勇系列(1)---把一個鏈表中的二進制數字轉換爲一個整型數(int)

Convert Binary Number in a Linked List to Integer這道題在leetcode上面算做是「easy」,然而小生我仍是不會作,因而根據大佬的回答來整理一下思路以便往後複習。node

https://leetcode.com/problems/convert-binary-number-in-a-linked-list-to-integer/算法

 

1.原題:

Given head which is a reference node to a singly-linked list. The value of each node in the linked list is either 0 or 1. The linked list holds the binary representation of a number.Return the decimal value of the number in the linked list.編程

翻譯:Head是一個單鏈表的引用,每一個鏈表的元素都是1或者0,鏈表的數字們組成起來表明一個二進制數字(好比說 [1,0,1]表明二進制的101)。你須要返回這個二進制所表明的十進制數字。編程語言

 

輸入輸出:spa

Input: head = [1,0,1] .net

Output: 5翻譯

 

這是單鏈表的定義:code

/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/blog

 

2.解題思路:

首先做爲算法題,大多數語言均可以用,做者這裏習慣,用的是C++。ci

這道題考驗的主要是答題者對編程語言中二進制的瞭解。

 

a.解題所須要的知識:

二進制的101表明十進制的5,這是由於 4 + 1 = 5。這個不用說了吧。

 

而咱們要注意的就是 「<<」,這個不是咱們熟知的C++輸出符,而是指往左移,後面的數字是指左移1一位。假設ret是3,ret <<= 1 以後就會ret = 6。

 

|= 意思爲:按位或後賦值,也就是給對應的二進制的數字的位置賦值,假設ret是7,ret |= 4以後ret仍然是7,由於7是0111,4是0100,注意這4這個位置已經有1了因此已經賦值了,所以結果不變。

 

head->val就是指鏈表裏面的val。關於鏈表的定義能夠參考:https://blog.csdn.net/slandarer/article/details/91863177

 

b.解題思路:

解題思路見註釋,很是通俗易懂。

 

參考答案:

class Solution {
public:
int getDecimalValue(ListNode* head) {
int ret = 0;     //設置ret爲0

while(head)   //在head都不爲NULL的狀況下繼續循環

{
ret <<= 1;     

//咱們會把ret左移,因此說若是以前已經有一位1了.

//那就會被推到更高的位置,好比說以前爲0001,那麼如今就是0010


ret |= head->val;     

//若是head->val是1,就給這一層賦值1,若是是0,就維持不變。

//例子:好比說以前咱們已經獲得了0010,如今若是爲1,就是0011;若是是0,就是0010不變。


head = head->next;   

//指向下一個鏈表元素。
}
return ret; 
}
};

相關文章
相關標籤/搜索