leetcode 67

67. Add Binary

Given two binary strings, return their sum (also a binary string).

For example,
a = "11"
b = "1"
Return "100".

两个字符串存储二进制数,进行二进制加法,返回相加之后的结果。

代码如下:

  1 class Solution {
  2 public:
  3     string addBinary(string a, string b) {
  4         int flag = 0;
  5         int la = a.size() - 1;
  6         int lb = b.size() - 1;
  7         while(la >= 0 && lb >= 0)
  8         {
  9             if((int)(a[la]-'0') + (int)(b[lb]-'0') + flag > 1)
 10             {
 11                 if((int)(a[la]-'0') + (int)(b[lb]-'0') + flag == 3)
 12                 {
 13                     la > lb ? a[la] = '1' : b[lb] = '1';
 14                 }
 15                 else
 16                 {
 17                     la > lb ? a[la] = '0' : b[lb] = '0';
 18                 }
 19                 flag = 1;
 20             }
 21             else
 22             {
 23                 if((int)(a[la]-'0') + (int)(b[lb]-'0') + flag == 1)
 24                 {
 25                     la > lb ? a[la] = '1' : b[lb] = '1';
 26                 }
 27                 else
 28                 {
 29                     la > lb ? a[la] = '0' : b[lb] = '0';
 30                 }
 31                 flag = 0;
 32             }
 33             la --;
 34             lb --;
 35         }
 36         if(flag == 0)
 37         {
 38             return la > lb ? a : b;
 39         }
 40         if(a.size() > b.size() && flag == 1)
 41         {
 42             for(int j = a.size()-b.size()-1; j >= 0; j--)
 43             {
 44                 if((int)(a[j]-'0') + flag > 1)
 45                 {
 46                     if((int)(a[j]-'0') + flag == 3)
 47                     {
 48                         a[j] = '1';
 49                     }
 50                     else
 51                     {
 52                         a[j] = '0';
 53                     }
 54                     flag =1;
 55                 }
 56                 else
 57                 {
 58                     if((int)(a[j]-'0') + flag == 1)
 59                     {
 60                         a[j] = '1';
 61                     }
 62                     else
 63                     {
 64                         a[j] = '0';
 65                     }
 66                     flag = 0;
 67                     break;
 68                 }
 69             }
 70             if(flag == 1)
 71             {
 72                 return "1" + a;
 73             }
 74             return a;
 75         }
 76         else
 77         {
 78             for(int j = b.size()-a.size()-1; j >= 0; j--)
 79             {
 80                 if((int)(b[j]-'0') + flag > 1)
 81                 {
 82                     if((int)(b[j]-'0') + flag == 3)
 83                     {
 84                         b[j] = '1';
 85                     }
 86                     else
 87                     {
 88                         b[j] = '0';
 89                     }
 90                     flag =1;
 91                 }
 92                 else
 93                 {
 94                     if((int)(b[j]-'0') + flag == 1)
 95                     {
 96                         b[j] = '1';
 97                     }
 98                     else
 99                     {
100                         b[j] = '0';
101                     }
102                     flag = 0;
103                     break;
104                 }
105             }
106             if(flag == 1)
107             {
108                 return "1" + b;
109             }
110             return b;
111         }
112     }
113 };

 这样写代码太乱,可以先进行对齐操作,将短的字符串通过填充‘0’来使两个字符串长度相同。

原文地址:https://www.cnblogs.com/shellfishsplace/p/5857244.html