zoukankan      html  css  js  c++  java
  • 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是从尾部进行添加的 添加后的结果必须进行反转才是正确的返回结果

  • 相关阅读:
    手机抓包方法
    IBM appscan 9.0破解版分享
    C#打开新页面
    双城记
    卸载趋势
    测试环境搭建
    C#常用函数→ASP.NET篇
    C#常用函数--通用篇
    读>>>>白帽子讲Web安全<<<<摘要→我推荐的一本书→1
    TCP/IP网络编程技术基础
  • 原文地址:https://www.cnblogs.com/phantom576/p/11684080.html
Copyright © 2011-2022 走看看