zoukankan      html  css  js  c++  java
  • leetcode 67:二进制求和

    /**
     * @Class AddBinary
     * @Description 67. 二进制求和
     * 给你两个二进制字符串,返回它们的和(用二进制表示)。
     * 输入为 非空 字符串且只包含数字 1 和 0。
     * <p>
     * 示例 1:
     * 输入: a = "11", b = "1"
     * 输出: "100"
     * <p>
     * 示例 2:
     * 输入: a = "1010", b = "1011"
     * 输出: "10101"
     * @Author 
     * @Date 2020/6/23
     **/
    public class AddBinary {
    }
    
    public static String addBinary(String a, String b) {
    	if (a == null || a == "") {
    		return b;
    	}
    	if (b == null || b == "") {
    		return a;
    	}
    
    	StringBuilder c = new StringBuilder("");
    	boolean flag = false;
    	int p = a.length() - 1;
    	int q = b.length() - 1;
    	int tempA = 0, tempB = 0, tempC = 0;
    	while (p >= 0 && q >= 0) {
    		tempA = Integer.valueOf(a.charAt(p) - '0');
    		tempB = Integer.valueOf(b.charAt(q) - '0');
    		tempC = tempA + tempB + (flag == true ? 1 : 0);
    		flag = tempC > 1 ? true : false;
    		c.append(tempC % 2);
    		p--;
    		q--;
    	}
    	while (p >= 0) {
    		tempA = Integer.valueOf(a.charAt(p) - '0');
    		tempC = tempA + (flag == true ? 1 : 0);
    		flag = tempC > 1 ? true : false;
    		c.append(tempC % 2);
    		p--;
    	}
    	while (q >= 0) {
    		tempB = Integer.valueOf(b.charAt(q) - '0');
    		tempC = tempB + (flag == true ? 1 : 0);
    		flag = tempC > 1 ? true : false;
    		c.append(tempC % 2);
    		q--;
    	}
    
        // 最后判断是否需要进位
    	if (flag) {
    		c.append("1");
    	}
    	return c.reverse().toString();
    }
    
    /**
     * 解法2:较短的部分用'0'补齐
     */
    public static String addBinary(String a, String b) {
    	StringBuilder ans = new StringBuilder("");
    	int lenA = a.length();
    	int lenB = b.length();
    	int maxlen = Math.max(lenA, lenB);
    	boolean flag = false;
    
       /* 方式1:
    	for (int i = maxlen - 1; i >= 0; i--) {
    		// 字符串a的下标
    		int indexA = i + lenA - maxlen;
    		// 字符串b的下标
    		int indexB = i + lenB - maxlen;
    		int sum = (indexA >= 0 ? a.charAt(indexA) - '0' : 0)
    				+ (indexB >= 0 ? b.charAt(indexB) - '0' : 0);
    		sum += flag == true ? 1 : 0;
    		ans.append(sum % 2);
    		flag = sum / 2 > 0 ? true : false;
    	}
    	*/
    	// 方式2:两个指针分别指向字符串,分别移动
    	for (int i = lenA - 1, j = lenB - 1; i >= 0 || j >= 0; i--, j--) {
    		int sum = (i >= 0 ? a.charAt(i) - '0' : 0)
    				+ (j >= 0 ? b.charAt(j) - '0' : 0);
    		sum += flag == true ? 1 : 0;
    		ans.append(sum % 2);
    		flag = sum / 2 > 0 ? true : false;
    	}
        // 最后判断是否需要进位
    	if (flag) {
    		ans.append("1");
    	}
    	return ans.reverse().toString();
    }
    
    // 测试用例
    public static void main(String[] args) {
    	String a = "11", b = "11";
    	String ans = addBinary(a, b);
    	System.out.println("demo01 result:" + ans);
    
    	a = "1010";
    	b = "1011";
    	ans = addBinary(a, b);
    	System.out.println("demo02 result:" + ans);
    
    	a = "1";
    	b = "111";
    	ans = addBinary(a, b);
    	System.out.println("demo03 result:" + ans);
    }
    
  • 相关阅读:
    写一个工具生成数据库实体类
    自己写一个java的mvc框架吧(三)
    自己写一个java的mvc框架吧(二)
    自己写一个java的mvc框架吧(一)
    手把手教你写一个java的orm(完)
    JavaEE系列之(二)commons-fileupload实现文件上传、下载
    JavaEE系列之(一)JSP基础知识详解
    Servlet---JavaWeb技术的核心基础,JavaWeb框架的基石(二)
    Servlet---JavaWeb技术的核心基础,JavaWeb框架的基石(一)
    cygwin简介及使用
  • 原文地址:https://www.cnblogs.com/fyusac/p/13181051.html
Copyright © 2011-2022 走看看