Leetcode 67:Add Binary(二進制求和)
(python、java) 公眾號:愛寫bug
Given two binary strings, return their sum (also a binary string).
The input strings are both non-empty and contains only characters 1
or 0
.
給定兩個二進制字符串辨赐,返回他們的和(用二進制表示)掂咒。
輸入為非空字符串且只包含數(shù)字 1
和 0
客年。
Example 1:
Input: a = "11", b = "1"
Output: "100"
Example 2:
Input: a = "1010", b = "1011"
Output: "10101"
解題思路(Java):
? Java:由于Java語言不像 C/C++ 屡谐,Java字符串 String 不可變筷登,比較字符串不能用 “=” ,”=“ 會比較字符串是否為同一個對象先舷,而不是比較字符串內(nèi)容是否相同鹰祸。StringBuilder 可操作性較好,可用來記錄每一位數(shù) 相加后的最終值密浑。
? 所以這道題輸入字符串可利用 chatAt() 方法(用于返回指定索引處的字符。索引范圍為從 0 到 length() - 1粗井。)轉(zhuǎn)化為char字符尔破,減去字符 ‘0’
,得 int 型數(shù)值 0 或 1 浇衬,分別與sum累加 懒构。
java:
class Solution {
public String addBinary(String a, String b) {
int i=a.length()-1,j=b.length()-1,tmp=0,sum;
StringBuilder str=new StringBuilder();
while (i>=0||j>=0){
sum=tmp;
if(i>=0) sum += a.charAt(i--)- '0';
if(j>=0) sum += b.charAt(j--)- '0';
tmp=sum/2;//tmp記錄是否進一位
str.append(sum%2);//sum%2得余數(shù),即為該位 最終數(shù)字
}
if(tmp!=0) str.append(tmp);
return str.reverse().toString();//將 StringBuilder 所得倒置后即為答案耘擂,轉(zhuǎn)為 String返回
}
}
解題思路(python3):
? python3明顯靈活很多:
bin()
函數(shù) -- 返回一個整數(shù) int 或者長整數(shù) long int 的二進制表示胆剧。
- 返回的數(shù)值是以0b開頭,表明返回的數(shù)值是二進制
int()
函數(shù)用于將一個字符串或數(shù)字轉(zhuǎn)換為整型醉冤。
? class int(x, base=10)
- x -- 字符串或數(shù)字秩霍。
- base -- 進制數(shù),默認十進制蚁阳。(指定base為非十進制時铃绒,x 需以字符串形式傳入)
python3:
class Solution:
def addBinary(self, a: str, b: str) -> str:
"""
:type a: str
:type b: str
:return: str
"""
return bin(int(a,2)+int(b,2))[2:] #[2:]從第三個元素開始截取,忽略 0b