给定两个用字符串表示的二进制数,返回他们的和。
数据范围:字符串长度满足 ,字符串中只含有 0 和 1,且保证除 0 以外的二进制数没有前导零的情况。
import java.util.*; import java.math.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param A string字符串 * @param B string字符串 * @return string字符串 */ public String binaryAdd (String A, String B) { // write code here //使用BigInteger将2进制转为10禁止 BigInteger num1=new BigInteger(A,2); BigInteger num2=new BigInteger(B,2); //将十进制转为2进制字符串 BigInteger num=num1.add(num2); String str=num.toString(2); return str; } }
import java.util.*; import java.math.BigInteger; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param A string字符串 * @param B string字符串 * @return string字符串 */ public String binaryAdd (String A, String B) { BigInteger a = new BigInteger(A,2); BigInteger b = new BigInteger(B,2); return (a.add(b)).toString(2); } }
import java.util.*; public class Solution { public String binaryAdd (String A, String B) { int i = A.length()-1, j = B.length()-1; StringBuilder res = new StringBuilder(); int carry = 0, val = 0; while (i >= 0 || j >= 0) { val = 0; val += carry; if (i >= 0) val += A.charAt(i--)-'0'; if (j >= 0) val += B.charAt(j--)-'0'; carry = val / 2; val %= 2; res.append(val); } if (carry > 0) res.append(carry); return res.reverse().toString(); } }
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param A string字符串 * @param B string字符串 * @return string字符串 */ public String binaryAdd (String A, String B) { // write code here int n = A.length(), m = B.length(); // 竖式求和 int carry = 0; // 进位 Stack<Integer> stack = new Stack<>(); for(int i = n - 1, j = m - 1; i >= 0 || j >= 0; i--, j--){ int sum = (i >= 0? A.charAt(i) - '0': 0) + (j >= 0? B.charAt(j) - '0': 0) + carry; stack.push(sum % 2); carry = sum / 2; } if(carry > 0) { stack.push(carry); } StringBuilder res = new StringBuilder(); while(!stack.isEmpty()){ res.append(stack.pop()); } return res.toString(); } }