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’来使两个字符串长度相同。