67. 二进制求和

1.一些新的知识点:

  • 当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。

image-20200623191413447

  • “charAt() 方法用于返回指定索引处的字符。索引范围为从 0 到 length() - 1。”
  • image-20200623191946701
  • Java 的反转函数 reverse() 将字符串反转
  • string.reverse();
  • image-20200623192245991
  • 位运算符:
  • image-20200623193029996
  • ^ : 按位抑或:不进位的加法:

2.想法

  • 突然看到string字符串求和,想起了以前的各种题目,但是很没有头绪;
  • 印象中,都是用最笨的 数组 的方式来进行,从没有尝试过用string来进行处理;

是个学习的机会;


3.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution {
public String addBinary(String a, String b) {
StringBuffer ans = new StringBuffer();
int carry = 0;
int n = Math.max(a.length(),b.length());

for(int i=0;i<n;i++){
//string.charAt():寻找当前string在指定位置的 字符 char;
// 细节: string.length() 需要用上括号! 别忘记括号!
carry += i < a.length()? (a.charAt(a.length() - 1 - i) - '0') : 0;
carry += i < b.length()? (b.charAt(b.length() - 1 - i) - '0') : 0;

ans.append((char)(carry % 2 + '0'));
carry /= 2;
}
if(carry > 0){
ans.append('1');
}
ans.reverse();// 这个方法实现的功能是,将 StringBuffer 字符串进行反转!!!
return ans.toString();
//因为是 StringBuffer 类型,而返回类型要求是 String,所以调用 toString()方法;
}
}