> 生活
二进制剑士(二进制算术加法运算怎么算)
导语:剑指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.二进制求和
免责声明:本站部份内容由优秀作者和原创用户编辑投稿,本站仅提供存储服务,不拥有所有权,不承担法律责任。若涉嫌侵权/违法的,请反馈,一经查实立刻删除内容。本文内容由快快网络小森创作整理编辑!