# 67. Add Binary && 2. Add Two Numbers 筆記 題目:給定兩個二進製字串a和b,將它們的總和作為二進製字串傳遞。 要注意兩個字串相加完後可能會進位,所以要處理進位問題,以及字串要倒過來讀取,使用push_back後再reverse回來,這邊參考了標準解法使用了carry進位字元來處理進位問題,並且漂亮的使用了`a[i]-'0'`來作為字串轉數字的方法來解題。 ```cpp= class Solution { public: string addBinary(string a, string b) { string result; int i=a.size()-1, j=b.size()-1, carry=0; while(i>=0||j>=0){ int sum=carry; if(i>=0){sum+=a[i]-'0'; --i;} if(j>=0){sum+=b[j]-'0'; --j;} result.push_back(sum%2+'0'); carry = sum/2; } if(carry) result.push_back(carry+'0'); reverse(result.begin(),result.end()); return result; } }; ``` 第二題跟這題十分類似,主要是加上linked list而已,然後變成十進位,再另外進行處理。 ```cpp= /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next(next) {} * }; */ class Solution { public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { ListNode * resultNode = new ListNode(0); ListNode * result = resultNode; int carry = 0; int sum; while(l1||l2){ sum=carry; if(l1){sum+=l1->val; l1=l1->next;} if(l2){sum+=l2->val; l2=l2->next;} carry = sum/10; result->next = new ListNode(sum%10); result = result->next; } if(carry) result->next = new ListNode(1); return resultNode->next; } }; ``` ###### tags: `LeetCode`
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up