funcbinarySum(a,b string)string{
index_a :=len(a)-1
index_b :=len(b)-1
jinwei :=0
result :=""for index_a >=0&& index_b >=0{
ia := a[index_a]-'0'// -'0' 可以得到對應數字
ib := b[index_b]-'0'
sum :=int(ia)+int(ib)+ jinwei
if sum >=2{
jinwei =1}else{
jinwei =0}
res := sum %2+'0'
result = fmt.Sprintf("%c%s",res,result)
index_a--
index_b--}for index_a >=0{
ia := a[index_a]-'0'
sum =int(ia)+ jinwei
if sum >=2{
jinwei =1}else{
jinwei =0}
res := sum %2+'0'
result = fmt.Sprintf("%c%s",res,result)
index_a--}for index_b >=0{
ib := b[index_b]-'0'
sum =int(ib)+ jinwei
if sum >=2{
jinwei =1}else{
jinwei =0}
res := sum %2+'0'
result = fmt.Sprintf("%c%s",res,result)
index_b--}if jinwei ==1{
result = fmt.Sprintf("1%s",result)}return result
}
第二種: math/big 求解
funcbinaryadd(a,b string)string{
ai,_:=new(big.Int).SetString(a,2)
bo,_:=new(big.Int).SetString(b,2)
res := ai.Add(ai,bo)return res.Text(2)}
最接近三數之和
functhreeSum(nums []int, target int)int{// 我們先對切片進行排序,升序排序
sort.Ints(nums)//我們第一次會和一個特別大的差值進行比較,這樣第一個被認爲最接近值會被成功賦值
best := math.MaxInt32
// 求絕對值的函數
abs :=func(num int)int{if num <0{return-1* num
}return num
}
update :=func(current int){ifabs(current-target)<abs(best-target){
best = current
}}// []int{1,2,3,4,5,6,7,8,9}// i// k(i+1) --> 向左移動// 向右移動 <--- v// 當我們算出來的sum 大於target時,說明nums[v]值可能大了,所以我們得縮小 v 的索引號// 當我們算出來的sum 小於target時,說明nums[k]值可能小了,所以我們得增大 v 的索引號for i :=0; i <len(nums); i++{if i >0&& nums[i]== nums[i-1]{// 通過比較前後兩個數的大小,可以排除相同元素,加速枚舉過程continue}
k, v := i+1,len(nums)-1for k < v {
sum := nums[i]+ nums[k]+ nums[v]update(sum)if sum < target {
k++}elseif sum > target {
v--}else{return target
}}}return best
}