• LeetCode OJ:Add Binary(二进制相加)


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

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

    简单的二进制相加而已,只不过传入的参数是字符串而已。为了方便,先将string  reverse了一下,代码如下:

     1 class Solution {
     2 public:
     3     string addBinary(string a, string b) {
     4         reverse(a.begin(), a.end());
     5         reverse(b.begin(), b.end());
     6         int len1 = a.length();
     7         int len2 = b.length();
     8         string result;
     9         int flag ,val;
    10         flag = val = 0;
    11         int i;
    12         for(i = 0; i < len1 && i < len2; ++i){
    13             val = (a[i] - '0') + (b[i] - '0') + flag;
    14             result.append(1, val % 2 + '0');
    15             flag = val/2;
    16         }
    17         while (i < len1) {
    18             val = a[i] - '0'+ flag;
    19             result.append(1, val % 2 + '0');
    20             flag = val/2;
    21             ++i;
    22         }
    23         while (i < len2 ){
    24             val = b[i] - '0'+ flag;
    25             result.append(1, val % 2 + '0');
    26             flag = val/2;
    27             ++i;
    28         }
    29         cout << "flag " << flag << endl;
    30         if(flag != 0)
    31             result.append(1, '1');
    32         reverse(result.begin(), result.end());
    33         return result;
    34     }
    35 };

     java:以前的循环用的好蠢啊,居然用了三次循环,下面的java稍微有些改进:

     1 public class Solution {
     2     public String addBinary(String a, String b) {
     3         int len1 = a.length();
     4         int len2 = b.length();
     5         String ret = new String();
     6         int i = 0;
     7         int carry = 0;
     8         a = ReverseStr(a);
     9         b = ReverseStr(b);
    10         while(i < len1 || i < len2 || carry != 0){
    11             int val = ((i<len1)?(a.charAt(i)-'0'):0) + ((i<len2)?(b.charAt(i)-'0'):0) + carry;
    12             carry = 0;
    13             if(val > 1){
    14                 carry = val/2;
    15                 ret += (char)((val%2) + '0');
    16             }else{
    17                 ret += (char)(val + '0');
    18             }
    19             i++;
    20         }
    21         return ReverseStr(ret);
    22     }
    23 
    24        public String ReverseStr(String str){
    25         return new StringBuffer(str).reverse().toString();
    26     }
    27 }
  • 相关阅读:
    Windows激活客户端 已停止工作
    sevices.msc灰色处理办法
    日期求星期(java)蓝桥杯
    全排列筛选(java)
    日期类的使用(java)蓝桥杯
    蓝桥杯加法变乘法(java)
    搭积木(java)蓝桥杯
    Ftp commands and options
    随机long(Random long/NextLong)
    Windows Azure Storage Explorer List
  • 原文地址:https://www.cnblogs.com/-wang-cheng/p/4870243.html
Copyright © 2020-2023  润新知