408. Add BinaryLintCode java
Posted phdeblog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了408. Add BinaryLintCode java相关的知识,希望对你有一定的参考价值。
Description
Given two binary strings, return their sum (also a binary string).
Example
a = 11
b = 1
Return 100
解题:二进制相加。我的思路是,先转成StringBuilder对象(reverse方法比较好用),因为相加是从最后开始,所以先用reverse方法倒转过来。和上一题类似,用carry变量表示进位,0为不进位,1为需要进一位。最后的结果再倒过来。具体细节标注在代码中,代码如下:
public class Solution {
/**
* @param a: a number
* @param b: a number
* @return: the result
*/
public String addBinary(String a, String b) {
// write your code here
StringBuilder sa = new StringBuilder(a);
StringBuilder sb = new StringBuilder(b);
StringBuilder res = new StringBuilder();
int carry = 0;//表示进位
sa.reverse();
sb.reverse();
int i = 0;
for(i = 0; i < sa.length() && i < sb.length(); i++){
int tpa = sa.charAt(i) - ‘0‘;
int tpb = sb.charAt(i) - ‘0‘;
if(carry == 0){ // 没有进位
if(tpa == 1 && tpb == 1){
carry = 1;
res.append(‘0‘);
}else{
char temp = (char)((int)‘0‘ + (tpa+tpb));
res.append( temp );
}
}else{ //有进位;
if(tpa + tpb == 1){
carry = 1; // 依然有进位
res.append(‘0‘);
}else if( tpa + tpb == 2){
carry = 1;
res.append(‘1‘);
}else{
// 0 + 0
carry = 0;
res.append(‘1‘);
}
}
}
//对剩下的处理
while(i < sa.length()){
//把sa后面的接上去,但是要考虑进位
if(carry == 0){
res.append(sa.substring(i));
break;
}else{
//有进位
if(sa.charAt(i) == ‘1‘){
res.append(‘0‘);
}else{
res.append(‘1‘);
carry = 0;
}
i++;
}
}
while(i < sb.length()){
//把sa后面的接上去,但是要考虑进位
if(carry == 0){
res.append(sb.substring(i));
break;
}else{
//有进位
if(sb.charAt(i) == ‘1‘){
res.append(‘0‘);
}else{
res.append(‘1‘);
carry = 0;
}
i++;
}
}
if(carry == 1)
res.append(‘1‘);
return res.reverse().toString();
}
}
以上是关于408. Add BinaryLintCode java的主要内容,如果未能解决你的问题,请参考以下文章