From fe4cdf952996821b34c70c40347f3f8bc3fae4ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=94=90=E6=A0=91=E6=A3=AE?= <14021051@buaa.edu.cn> Date: Thu, 27 Sep 2018 23:43:36 +0800 Subject: [PATCH] Create 67. Add Binary.md --- 67. Add Binary.md | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 67. Add Binary.md diff --git a/67. Add Binary.md b/67. Add Binary.md new file mode 100644 index 0000000..2775a4d --- /dev/null +++ b/67. Add Binary.md @@ -0,0 +1,35 @@ +# [67. Add Binary](https://leetcode.com/problems/add-binary/description/) +# 思路 +题目要求实现多位二进制加法器。可以先考虑先实现一个一位二进制加法器,然后再运用这个一位二进制加法串接成多位的二进制加法,注意不要忘了处理进位。 +注意学习如何将char型的vector转成string: `string str(vc.begin(), vc.end())` +# C++ +``` +class Solution { +private: + int bit_add(const int a, const int b, int &cin){ // 一位加法器,cin是进位 + int tmp = a + b + cin; + cin = tmp / 2; + return tmp % 2; + } +public: + string addBinary(string a, string b){ + vectorres; + int high1 = a.size() - 1, high2 = b.size() - 1, cin = 0, sum; + while(high1 >= 0 && high2 >= 0){ + sum = bit_add(a[high1--] - '0', b[high2--] - '0', cin); + res.push_back(sum + '0'); + } + while(high1 >= 0){ + sum = bit_add(a[high1--] - '0', 0, cin); + res.push_back(sum + '0'); + } + while(high2 >= 0){ + sum = bit_add(b[high2--] - '0', 0, cin); + res.push_back(sum + '0'); + } + if(cin == 1) res.push_back('1'); + reverse(res.begin(), res.end()); + return string(res.begin(), res.end()); + } +}; +```