【leetcode】AddBinary

解题思路:

  • 首先把字符串ab补齐到同样长度,前面补零
  • 然后对应位做加法器,设置一个进位位
  • 字符转换成数字需要 -‘0‘
  • 数字转换为字符需要 +‘0‘
  • 结果字符数组需要比ab多一位
  • 最前面的一位为最后的进位位
    • 判断最后的进位如果为1,则设置结果数组第一位为1,创建字符串用result数组全部
    • 如果为0,则设置结果字符数组第一位为0,创建字符串用1到最后
      • 注意
        • 10都需要转换为char,不然会乱码,因为是acssi
        • 创建字符1到最后,是1result.lenght-1

代码:

package leetcode;

? ?

/**

* Given two binary strings, return their sum (also a binary string). For

* example, a = "11" b = "1" Return "100".

*

*/

public class AddBinary {

????public static void main(String[] args) {

????????String a = "101";

????????String b = "1";

????????int max_a_b = Math.max(a.length(), b.length());

????????if (a.length() >= b.length()) {

????????????b = String.format("%0" + max_a_b + "d", Integer.parseInt(b));

????????} else {

????????????a = String.format("%0" + max_a_b + "d", Integer.parseInt(a));

????????}

? ?

????????System.out.println("after zeroize string a is " + a + "\n"

????????????????+ "after zeroize string b is " + b);

????????char[] achar = a.toCharArray();

????????char[] bchar = b.toCharArray();

? ?

????????char[] result = new char[Math.max(achar.length, bchar.length) + 1];

????????int k = result.length - 1;// k is to the start of result

????????int i = max_a_b - 1;

? ?

????????int carry = 0;// 进位

????????int aint = 0;

????????int bint = 0;

????????while (i >= 0) {

????????????aint = achar[i] - ‘0‘;

????????????bint = bchar[i] - ‘0‘;

????????????if (aint + bint + carry > 1) {

????????????????result[k] = (char) (‘0‘ + aint + bint + carry - 2);

????????????????carry = 1;

? ?

????????????} else {

????????????????result[k] = (char) (‘0‘ + aint + bint + carry);

????????????????carry = 0;

? ?

????????????}

????????????k--;

????????????i--;

????????}

????????if (carry == 1) {

????????????result[k] = (char) ((char) carry + ‘0‘);

????????????System.out.println("result is " + new String(result));

????????} else {

????????????result[k] = (char) ((char) carry + ‘0‘);

????????????System.out.println("result is "

????????????????????+ new String(result, 1, result.length - 1));

????????}

????}

}

? ?

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。