欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

67. 二进制求和

程序员文章站 2022-04-24 16:19:58
...

#67. 二进制求和

题目描述
67. 二进制求和
解题思路
求和的题目好多啊,不同的是这个是二进制,所以有了一些不一样的做法
1、自己写的
思路是如果两个字符串长度不一样,就进行补0,这样对于进位的处理会方便很多。

public String addBinary(String a, String b) {        
	int i = a.length() - 1,j = b.length() - 1;      StringBuilder 
	sb = new StringBuilder();         
	int plus = 0;        
	while(i >= 0 || j >= 0) {            
		char a1 = i >= 0?a.charAt(i):'0';            
		char b1 = j >= 0?b.charAt(j):'0';            
		int x = a1 + b1 -'0' - '0' +plus;            
		plus = x/2;            
		x= x%2;            
		sb.append(x);            
		i--;j--;        
	}        
	if(plus == 1)            
		sb.append('1');        
	sb.reverse();        
	return sb.toString();    
}

67. 二进制求和
提交结果:
67. 二进制求和
2、转换成数字(数据很大的时候会溢出)

public String addBinary(String a, String b) {         
	return Integer.toBinaryString(Integer.parseInt(a, 2) +Integer.parseInt(b, 2));
    }

3、位运算
67. 二进制求和
67. 二进制求和

import java.math.BigInteger;
class Solution {    
	public String addBinary(String a, String b) {       
		BigInteger x = new BigInteger(a, 2);        
		BigInteger y = new BigInteger(b, 2);        
		BigInteger zero = new BigInteger("0", 2);   
		BigInteger answer,plus;        
		while(y.compareTo(zero) != 0) {            
			answer = x.xor(y);            
			plus = x.and(y).shiftLeft(1);            
			x = answer;            
			y = plus;        
		}        
		return x.toString(2);    
	}
}

67. 二进制求和
提交结果:
67. 二进制求和

相关标签: 力扣刷题笔记