2020-2-2
- One has to be fair and very honest.
要做一個正直的人。
題目:
給你一個單鏈表的引用結點 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。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/convert-binary-number-in-a-linked-list-to-integer
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。
個人解答:(C版本)
- 思路很簡單,就是獲取鏈表元素中的每個值,然後按照二進制轉十進制的方法轉換即可
int power_2(int n)
{
int val=1;
for(int i=0; i<n; i++)
{
val *= 2;
}
return val;
}
int getDecimalValue(struct ListNode* head){
struct ListNode *q = head;
int num_dec = 0;
int len=0;
if(q == NULL)
return 0;
while(q != NULL)
{
len++;
q=q->next;
}
q = head;
while(q != NULL)
{
len--;
if(q->val == 1)
{
num_dec+= power_2(len);
}
q=q->next;
}
return num_dec;
}
- 結果:
他山之石:
- 我的方法搞複雜了,參考了官方題解,使用C語言重寫如下:
int getDecimalValue(struct ListNode* head){
struct ListNode *q = head;
int num_dec = 0;
if(q == NULL)
return 0;
q = head;
while(q != NULL)
{
num_dec= num_dec*2 + q->val;
q=q->next;
}
return num_dec;
}