package cn.fansunion.leecode.computer; /** * 二进制求和 给你两个二进制字符串,返回它们的和(用二进制表示)。 * * 输入为 非空 字符串且只包含数字 1 和 0。 力扣 * * 和PlusOne这道题,思路基本一样,PlusOne是一个变量+固定的数字1。 * 力扣 * * @author wen.lei@brgroup.com * * 2022-2-18 */ public class AddBinary /*示例 1: 输入: a = "11", b = "1" 输出: "100" 示例 2: 输入: a = "1010", b = "1011" 输出: "10101" 提示: 每个字符串仅由字符 '0' 或 '1' 组成。 1 <= a.length, b.length <= 10^4 字符串如果不是 "0" ,就都不含前导零。 */ /** * 获得2个字符串的最大长度,从低位到高位逐个相加。维护最新的进位。如果最终产生1个进位,需要额外添加 * * @param a * @param b * @return */ public String addBinary(String a, String b) final int lengthA = a.length(); final int lengthB = b.length(); int length = Math.max(lengthA, lengthB); int plus = 0 ; StringBuilder sb = new StringBuilder(); for ( int index = 0 ; index < length; index++) int chAInt = 0 ; int chBInt = 0 ; if (index < lengthA) char chA = a.charAt(lengthA - index - 1 ); //int类型转换,强制转换不行(Ascii) //final int chAInt = (int)chA; //final int chBInt = (int)chB; chAInt = Character.digit(chA, 2 );
if (index < lengthB) char chB = b.charAt(lengthB - index - 1 ); chBInt = Character.digit(chB, 2 );
int sum = chAInt + chBInt + plus; sb.append(sum % 2 ); if (sum >= 2 ) plus = 1 ; else
plus = 0 ;
//新产生1个最高位 if (plus == 1 ) sb.append(plus);
// 低位先维护的,展示时,高位在前 return sb.reverse().toString();
|