• leetcode第67题二进制的求和


    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/add-binary
    给定两个二进制字符串,返回他们的和(用二进制表示)。

    输入为非空字符串且只包含数字 1 和 0。

    示例 1:

    输入: a = "11", b = "1"
    输出: "100"
    示例 2:

    输入: a = "1010", b = "1011"
    输出: "10101"

    这里的难点也就是考虑进位的问题 首先 两者的长度可能不相同 我们必须在短的字符串前面添加0
    另外 需要从尾部进行遍历相加 相加结果对2进行取余 就是该位的结果 对2进行整除 那么就是进位
    如果产生进位 进位的值需要加到前一位 最后需要判断第一位的进位是不是为1 如果是1的话 那么
    还需要添加1

    import java.util.Scanner;

    public class AddBinaryDemo67 {
    public static String addBinary(String a, String b){
    StringBuilder sb = new StringBuilder();
    int len_a = a.length();
    int len_b = b.length();
    int carry = 0;
    for(int i=len_a-1, j=len_b-1; i>=0||j>=0; i--,j--){
    int sum = carry;

    		if(i>=0){
    			sum+=a.charAt(i)-'0';
    		}else{
    			sum+=0;
    		}
    		
    		if(j>=0){
    			sum+=b.charAt(j)-'0';
    		}else{
    			sum+=0;
    		}
    		sb.append(sum%2);
    		carry=sum/2;
    	}
    	if(carry==1){
    		sb.append(1);
    	}else{
    		sb.append("");
    	}
    	
    	return sb.reverse().toString();
    }
    
    public static void main(String[] args) {
    	Scanner scanner = new Scanner(System.in);
    	String str = scanner.nextLine();
    	String[] str1 = str.split(" ");
    	String a = str1[0];
    	String b = str1[1];
    	String res = addBinary(a, b);
    	System.out.println(res);
    }
    

    }

    //这里说明一下为什么这里会需要进行反转 因为append是从尾部进行添加的 添加后的结果必须进行反转才是正确的返回结果

  • 相关阅读:
    C#调用Exe文件的方法及如何判断程序调用的exe已结束(转)
    C# Color (转)
    【666】语义分割减少过拟合
    【665】构建多损失函数
    libc timer
    分支管理
    MULLS:论文阅读
    微信支付宝整合支付开发中的常见问题
    IIS8中安装和使用URL重写工具(URL Rewrite)的方法
    通过Java 技术手段,检查你自己是不是被绿了...
  • 原文地址:https://www.cnblogs.com/phantom576/p/11684080.html
Copyright © 2020-2023  润新知