leetcode 二进制求和 addBinary
生活随笔
收集整理的這篇文章主要介紹了
leetcode 二进制求和 addBinary
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題目描述:
給定兩個(gè)二進(jìn)制字符串,返回他們的和(用二進(jìn)制表示)。
輸入為非空字符串且只包含數(shù)字?1?和?0。
示例?1:
輸入: a = "11", b = "1" 輸出: "100"示例?2:
輸入: a = "1010", b = "1011" 輸出: "10101"分析:在完成代碼之前,我們首先看看這一題應(yīng)該是一個(gè)什么樣子的思路。首先,輸入兩個(gè)字符串a(chǎn)和b,如果兩個(gè)字符串中元素個(gè)數(shù)不相等,我們應(yīng)該天添加0使其位數(shù)相等,方便進(jìn)行運(yùn)算,涉及到元素個(gè)數(shù),所以我們應(yīng)該在最開始求出各個(gè)字符串中的長(zhǎng)度。由于字符串中的元素1和0不是數(shù)字1和0,故按照ASCII碼表,我們應(yīng)該把它轉(zhuǎn)換成數(shù)字,a[i]-'0'。最后我們還需要一個(gè)進(jìn)位標(biāo)志,如果a[i]和b[j]都為1,則需要進(jìn)位。
代碼如下
class Solution { public:string addBinary(string a, string b) {string result; //用來存放結(jié)果int a_len = a.size(); //字符串的長(zhǎng)度int b_len= b.size();int n = max(a_len, b_len);bool carry = false; //進(jìn)位標(biāo)志if (a_len > b_len) {for (int i = 0; i < a_len - b_len; ++i) b.insert(b.begin(), '0'); //在前面位 //置加0使兩個(gè)字符串長(zhǎng)度相等}else if (a_len < b_len) {for (int i = 0; i < b_len - a_len; ++i) a.insert(a.begin(), '0');}for (int i = n - 1; i >= 0; --i) {int tmp = 0;if (carry) tmp = (a[i]-'0') + (b[i]-'0') + 1; //字符串中的0表示十進(jìn)制數(shù)48,所 //以應(yīng)該減去‘0’才能表示數(shù)字1else tmp = (a[i]-'0' ) + (b[i]-'0');if (tmp == 0) {result.insert(result.begin(), '0'); carry = false;}else if (tmp == 1) {result.insert(result.begin(), '1');carry = false;}else if (tmp == 2) {result.insert(result.begin(), '0');carry = true;}else if(temp==3){result.insert(result.begin(), '1');carry=false;}}if (carry) result.insert(result.begin(), '1');return result;} };?
總結(jié)
以上是生活随笔為你收集整理的leetcode 二进制求和 addBinary的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 煮鸡蛋的功效与作用、禁忌和食用方法
- 下一篇: 两数之和,输入有序数组 leetcode