搜索
写经验 领红包
 > 生活

二进制剑士(二进制算术加法运算怎么算)

导语:剑指OfferII002.二进制加法

题目

给定两个 01 字符串 a 和 b ,请计算它们的和,并以二进制字符串的形式输出。

输入为 非空 字符串且只包含数字 1 和 0。

示例 1:输入: a = , b = 输出:

示例 2:输入: a = , b = 输出:

提示:每个字符串仅由字符 &39; 或 &39; 组成。

1 <= a.length, b.length <= 10^4

字符串如果不是 ,就都不含前导零。

注意:本题与主站 67 题相同

解题思路分析

1、数组;时间复杂度O(n),空间复杂度O(n)

func addBinary(a string, b string) string {   if len(a) < len(b) {      a, b = b, a   }   length := len(a)   A := transToInt(a, length)   B := transToInt(b, length)   return makeString(add(A, B))}func transToInt(s string, length int) []int {   result := make([]int, length)   ls := len(s)   for i, b := range s {      result[length-ls+i] = int(b - &39;)   }   return result}func add(a, b []int) []int {   length := len(a) + 1   result := make([]int, length)   for i := length - 1; i >= 1; i-- {      temp := result[i] + a[i-1] + b[i-1]      result[i] = temp % 2      result[i-1] = temp / 2   }   i := 0   for i < length-1 && result[i] == 0 {      i++   }   return result[i:]}func makeString(nums []int) string {   bytes := make([]byte, len(nums))   for i := range bytes {      bytes[i] = byte(nums[i]) + &39;   }   return string(bytes)}

2、模拟;时间复杂度O(n),空间复杂度O(n)

func addBinary(a string, b string) string {   i := len(a) - 1   j := len(b) - 1   result :=    flag := 0   current := 0   for i >= 0 || j >= 0 {      intA, intB := 0, 0      if i >= 0 {         intA = int(a[i] - &39;)      }      if j >= 0 {         intB = int(b[j] - &39;)      }      current = intA + intB + flag      flag = 0      if current >= 2 {         flag = 1         current = current - 2      }      cur := strconv.Itoa(current)      result = cur + result      i--      j--   }   if flag == 1 {      result =  + result   }   return result}

总结

Easy题目,题目同leetcode 67.二进制求和

免责声明:本站部份内容由优秀作者和原创用户编辑投稿,本站仅提供存储服务,不拥有所有权,不承担法律责任。若涉嫌侵权/违法的,请反馈,一经查实立刻删除内容。本文内容由快快网络小森创作整理编辑!