9/1 力扣67题,2题

67.二进制求和

给你两个二进制字符串 ab ,以二进制字符串的形式返回它们的和。

示例 1:

输入:a = "11", b = "1"
输出:"100"

示例 2:

输入:a = "1010", b = "1011"
输出:"10101"

思路:将接收到的字符串变换为int形式,将两数相加,又将其变换为字符型二进制形式放入列表中,若两数相加和为0则直接返回0.

注意点:

1.字符型二进制变化为十进制整数:二进制每位乘的2的次方不同

n=int(s[i]) * flag + n

flag *= 2

2.十进制转化为二进制,取每次余数,将其变成字符形式储存在列表中,直至商为0

3.将字符型列表变换为整个字符串:"".join(字符型列表)

class Solution(object):
    def addBinary(self, a, b):
        """
        :type a: str
        :type b: str
        :rtype: str
        """
        i = len(a) - 1
        j = len(b) - 1
        n1 = 0
        n2 = 0
        flag = 1
        while i >= 0:
            n1 = n1 + int(a[i]) * flag
            i -= 1
            flag *= 2
        flag = 1
        while j >= 0:
            n2 = n2 + int(b[j]) * flag
            j -= 1
            flag *= 2
        n = n1 + n2
        if n == 0:
            return "0"
        l = []  # res = ""
        i = 0
        while n != 0:
            x = n % 2
            l.insert(0, str(x)) //res += str(x)
            n = n // 2
        s = "".join(l)
        return s      //return str[::-1]

网上看的解法:

class Solution(object):
    def addBinary(self, a, b):
        res = ""
        carry = 0
        i = len(a) - 1
        j = len(b) - 1
        while i >= 0 or j >= 0 or carry != 0:
            digitA = int(a[i]) if i >= 0 else 0
            digitB = int(b[j]) if j >= 0 else 0
            sum = digitA + digitB + carry
            carry = 1 if sum >= 2 else 0
            sum = sum - 2 if sum >= 2 else sum
            res += str(sum)
            i -= 1
            j -= 1
        return res[::-1]

利用以上解法,解出了第二题:

2.两数相加

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。

请你将两个数相加,并以相同形式返回一个表示和的链表。

你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例 1:

输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.

思考:仅有当两链表都为空且无进位时才停止,为了防止两链表不一样长时发生错误要添加逻辑:

d1 = l1.val if l1 !=None else 0 取值处

l1 = l1.next if l1 != None else l1 遍历处

每次的sum就是新生成的元素

# Definition for singly-linked list.

# class ListNode(object):

#     def __init__(self, val=0, next=None):

#         self.val = val

#         self.next = next

class Solution(object):

    def addTwoNumbers(self, l1, l2):

        """

        :type l1: ListNode

        :type l2: ListNode

        :rtype: ListNode

        """

        cur = 0

        head = ListNode()

        tail = head

        while l1 != None or l2 != None or cur != 0:

            d1 = l1.val if l1 !=None else 0

            d2 = l2.val if l2 !=None else 0

            sum = d1 + d2 + cur

            cur = 1 if sum >= 10 else 0

            sum = sum - 10 if sum >= 10 else sum

            p = ListNode()

            p.val = sum

            tail.next = p

            tail = tail.next

            l1 = l1.next if l1 != None else l1

            l2 = l2.next if l2 != None else l2

        return head.next

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值