开始有思路了!!!

        刷题真的是很神奇的事情,明明每个题目看起来都不难,但每次写,都能让人眼前一黑。可能这些题目标着简单,是对应着我们眼见就能看出结果,可还是那句话,我们用代码来实现这些题目却不是简单的问题。

        题目是一直不变的,人是不断学习的,我们在不断的学习编程,可以说到后来的日子里,我们能轻松解决一些简单的算法题,但绝不是现在,所以我还得不断学习、练习。

        写题目要多想,只有在想,我们才可以找到解题的思路。就比如这题:

二进制求和

给你两个二进制字符串 ab ,以二进制字符串的形式返回它们的和。

示例 1:

输入:a = "11", b = "1"

输出:"100"

         我们拿笔可以轻松得到结果,但仅限于一些长度短的,我们要转成所有二进制字符串都可以满足的,我开始的想法是先找到长度最长的这个字符串,然后将一个新的字符串存大于最长字符串一个字符存储,这样能保证两字符串相加后能够存进去,然后再各位上进行比较,如果各位相加再加上后面的进位一大于二,还得往前进位。最后考虑第一位是否要进位,对大于多出来的这一位是零还是一进行判断。

        思路可行,但有点不知道这么实现,然后又换了一个方法,先变成一样长,也想到StringBuilder类是可变长的,然后就简单了很多,我们考虑每次进位之后是否还要向前进位,就直接对StringBuilder进行append 一或者不加,就实现了。代码如下:

public static String addBinary(String a, String b) {

    int m =a.length() , n = b.length();
    if (m >n){
        String  zeroString ="";

        for (int j = 0; j < m-n; j++) zeroString+="0";
        b=zeroString+b;

    } else if (m<n){
        String  zeroString ="";
        for (int j = 0; j < n-m; j++) zeroString+="0";
        a = zeroString+a;
        m = n; // 让m表示最长的
    }
    //到这里a,b一样长
    int jinwei=0;
    StringBuilder sb = new StringBuilder();
    for (int i = m-1; i >=0 ; i--) {
        int c1 = a.charAt(i) =='0' ? 0:1;
        int c2 = b.charAt(i) =='0' ? 0:1;
        int cur = (c1+c2 +jinwei)%2; //当前位
        jinwei = (c1+c2+jinwei)/2; //进位
        sb.append(cur);
    }
    if (jinwei ==1){
        sb.append(jinwei);
    }
   return sb.reverse().toString()   ;

这样写确实麻烦,经过提醒,可以进行改进:

int m = a.length()-1 , n=b.length()-1;

int jinwei=0;

StringBuilder sb = new StringBuilder();

while(m>=0 || n>=0){

int a1 =m>=0 ? a.charAt(m) -'0' : 0;

int b1 = n>=0 ? b.charAt(n) - '0' :0;

int cur = (a1+b1+jinwei)%2;

jinwei = (a1+b1+jinwei)/2;

m--;n--;

sb.append(cur);
}

if (jinwei ==1){

sb.append(jinwei);

}

return sb.reverse().toString() ;

这样就可以省去对字符串弄成等长。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值