【刷题日记】67. 二进制求和

简介: 本次刷题日记的第 15 篇,力扣题为:67. 二进制求和 ,简单

【刷题日记】67. 二进制求和

本次刷题日记的第 15 篇,力扣题为:67. 二进制求和简单

一、题目描述:

image.png

晚上锻炼一波身体后,继续看看题,这个题,题目很清晰,描述很短,看上去也是简单题,这个妥妥的是个简单题,咱们来换换脑袋


但是我们也不能掉以轻心,还是要仔细的来分析这个题给出的重点内容和考查的点

二、思路分析:

1、这道题考察了什么思想?你的思路是什么?

题目中给出的信息有这些重点信息:

  • 给出的二进制数,都是字符串,咱们返回的也是需要是字符串
  • 字符串中的数字只有 0 和 1  ,且给出的字符串中是不含前导 0 的,且数组的长度范围是 1 到 10 的 4 次方,所以针对刷这道题不用考虑输入异常的情况

查看我们的示例:a = "1010", b = "1011"

看这个例子,**a 数组的长度和 b 数组的长度是一致的,**且中间涉及进位,最高位也涉及进位

image.png

下面这个例子,也要注意 a 数组的长度小于 b 数组的长度,或者 b 数组的长度小于 a 数组的长度,默认 上面是 a 数组,下面是 b 数组

image.png

总得来说需要考虑这几个点:

  • len(a) == len(b)
  • len(a) < len(b)
  • len(a) > len(b)
  • 进位的处理

三、编码

根据上述逻辑和分析,我们就可以翻译成如下代码

编码如下:

func addBinary(a string, b string) string {
    lenA,lenB := len(a),len(b)
    n := 0
    if lenA > lenB {
        n = lenA
    }else{
        n = lenB
    }
    res := ""
    jinwei := 0
    // 使用较长数组的长度来控制循环
    for i:=0; i<n; i++ {
        // 对应位数 a 数组上有值,那就进行相加
        if i<lenA {
            jinwei += int(a[lenA-i-1] - '0')
        }
        // 对应位数 b 数组上有值,那就进行相加
        if i<lenB {
            jinwei += int(b[lenB-i-1] - '0')
        }
        // a 数组和 b 数组对应位置上相加后,需要填在该位置的值 
        res = strconv.Itoa(jinwei % 2) + res
        // 需要向前进位的数据
        jinwei = jinwei / 2
    }
    // 判断最后是否需要进位
    if jinwei > 0{
        res = "1" + res
    }
    return res
}

看了如上编码之后可以发现,完全是按照编码前的思考和分析的情况来进行编码落地的

以小见大咱们编码之前确实是需要将方案设计清晰可落地,针对每一个细节和盲区都要逐个击破,这样才能做到降低编码后的风险

四、总结:

本题时间复杂度很明显是 O(n) ,n 是较长数组的长度,空间复杂度是 O(1)  引入了常数级别的内存消耗

原题地址:67. 二进制求和

今天就到这里,学习所得,若有偏差,还请斧正

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

image.png

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是阿兵云原生,欢迎点赞关注收藏,下次见~



相关文章
【LeetCode-每日一题】-67. 二进制求和
【LeetCode-每日一题】-67. 二进制求和
|
3月前
【一刷《剑指Offer》】面试题 12:打印 1 到最大的 n 位数
【一刷《剑指Offer》】面试题 12:打印 1 到最大的 n 位数
|
3月前
【一刷《剑指Offer》】面试题 10:二进制中 1 的个数
【一刷《剑指Offer》】面试题 10:二进制中 1 的个数
|
3月前
蓝桥杯真题代码记录(数位排序
蓝桥杯真题代码记录(数位排序
29 0
|
3月前
|
算法
刷题专栏(三):二进制求和
刷题专栏(三):二进制求和
52 0
|
3月前
|
算法
刷题专栏(十五):各位相加
刷题专栏(十五):各位相加
43 0
|
Python Cloud Native
【刷题日记】415. 字符串相加
本次刷题日记的第 48 篇,力扣题为:415. 字符串相加 ,简单
|
前端开发 C语言 Cloud Native
【刷题日记】2. 两数相加
本次刷题日记的第 6 篇,力扣题为:2. 两数相加 ,中等
|
Cloud Native
【刷题日记】504. 七进制数
本次刷题日记的第 3 篇,力扣题为:【刷题日记】504. 七进制数 ,简单
|
Go C语言 Cloud Native
【刷题日记】762. 二进制表示中质数个计算置位
本次刷题日记的第 25 篇,力扣题为:762. 二进制表示中质数个计算置位 ,简单