zoukankan      html  css  js  c++  java
  • LeetCode | Add Binary

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

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

    //思想是从后向前,从低位开始逐位相加,结果放到一个StringBuilder中,并用carry来表示是否有进位
    //某个字符串用光之后,另一个字符串的剩余部分加上carry,放入StringBuilder
    //最后,将StringBuilder反转返回
    public class Solution {
        public String addBinary(String a, String b) {
            
            if(a==null || a.length()==0){
                return b;
            }
            if(b==null || b.length()==0){
                return a;
            }
            
            int i = a.length() - 1;   //a的index
            int j = b.length() - 1;   //b的index
            
            int carry = 0;            //来维护进位信息,当为1时,表示低位和为2,有进位
            StringBuilder result = new StringBuilder();
            
            while(i>=0 && j>=0){     //从后向前,逐位的进行二进制加法,并维护进位
                int digit = (int)(a.charAt(i)-'0' + b.charAt(j)-'0') + carry;  //当前两位的sum,加上低位进位
                carry = digit/2;     //是否有进位
                digit %= 2;          //二进制的加法,结果只能为0或1
                
                result.append(digit);
                i--;
                j--;
            }                        //循环之后,i与j必有一个为(-1),另一个>=0
            
            while(i>=0){             //String a 有剩位
                int digit = (int)(a.charAt(i)-'0') + carry;
                carry = digit/2;     //是不是要继续向前进位
                digit %= 2;
                
                result.append(digit);
                i--;
            }
            
            while(j>=0){             //String b 有剩位
                int digit = (int)(b.charAt(j)-'0') + carry;
                carry = digit/2;     
                digit %= 2;
                
                result.append(digit);
                j--;
            }
            
            if(carry > 0){           //所有位都加完了,还有进位,就新增一位
                result.append(carry);
            }
            
            return result.reverse().toString();   //在StringBuilder中低位在前,故应reverse
        }
    }



  • 相关阅读:
    在 Borland C++ 及 Visual C++ 环境中使用 STLport (作者:孟岩)
    设置JavaFX-CSS改变TreeView节点图标
    Using MS DataGrid control with ADO
    两个加载fxml文件的方法
    JavaFX中ObservableValue类型
    在 Eclipse 下利用 gradle 构建系统
    JavaFX初探
    深度剖析如何保证缓存与数据库的一致性
    ACID的实现原理
    一颗高度为3的B+树能存多少行数据?
  • 原文地址:https://www.cnblogs.com/dosmile/p/6444442.html
Copyright © 2011-2022 走看看