【leetcode 简单】第十六题 二进制求和

给定两个二进制字符串,返回他们的和(用二进制表示)。

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

示例 1:

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

示例 2:

输入: a = "1010", b = "1011"
输出: "10101"
class Solution:
    def addBinary(self, a, b):
        """
        :type a: str
        :type b: str
        :rtype: str
        """
        a_len=len(a)
        b_len=len(b)
        result=‘‘
        next =‘0‘
        while a_len and b_len :
            if sum([int(next),int(a[a_len-1]),int(b[b_len-1])]) == 3:
                result +=‘1‘
                next = ‘1‘
            elif sum([int(next),int(a[a_len-1]),int(b[b_len-1])]) == 2:
                result+=‘0‘
                next =‘1‘
            elif sum([int(next),int(a[a_len-1]),int(b[b_len-1])]) == 0:
                result+=‘0‘
                next =‘0‘
            elif sum([int(next),int(a[a_len-1]),int(b[b_len-1])]) < 2:
                result+=‘1‘
                next =‘0‘
            a_len-=1
            b_len-=1
        new = a[:a_len] if a_len > b_len else b[:b_len]
        if new:
            for i in new[::-1]:
                if sum([int(next),int(i)]) == 2:
                    result+=‘0‘
                    next =‘1‘
                elif sum([int(next),int(i)]) == 1:
                    result+=‘1‘
                    next =‘0‘
                else:
                    result+=‘0‘
                    next =‘0‘
        if next != 0:
            result+=next
        return (result[::-1])
class Solution:
    def addBinary(self, a, b):
        """
        :type a: str
        :type b: str
        :rtype: str
        """

        return format(int(a,2)+int(b,2),"b")

原文地址:https://www.cnblogs.com/flashBoxer/p/9458240.html

时间: 2024-08-28 22:58:45

【leetcode 简单】第十六题 二进制求和的相关文章

【leetcode 简单】第十七题 二进制求和

实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去. 示例 1: 输入: 4 输出: 2 示例 2: 输入: 8 输出: 2 说明: 8 的平方根是 2.82842...,   由于返回类型是整数,小数部分将被舍去. #define PF(w) ((w)*(w)) int mySqrt(int x) { int start = 0; int end = x; double mid = 0; i

【leetcode 简单】 第九十三题 二进制手表

二进制手表顶部有 4 个 LED 代表小时(0-11),底部的 6 个 LED 代表分钟(0-59). 每个 LED 代表一个 0 或 1,最低位在右侧. 例如,上面的二进制手表读取 "3:25". 给定一个非负整数 n 代表当前 LED 亮着的数量,返回所有可能的时间. 案例: 输入: n = 1 返回: ["1:00", "2:00", "4:00", "8:00", "0:01",

【leetcode 简单】 第九十六题 最长回文串

给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串. 在构造过程中,请注意区分大小写.比如 "Aa" 不能当做一个回文字符串. 注意: 假设字符串的长度不会超过 1010. 示例 1: 输入: "abccccdd" 输出: 7 解释: 我们可以构造的最长的回文串是"dccaccd", 它的长度是 7. class Solution(object): def longestPalindrome(self, s): &quo

code第一部分数组:第十六题 数组表示数,加一操作

code第一部分数组:第十六题  数组表示数,加一操作 Given a number represented as an array of digits, plus one to the number. #include <iostream> #include <stdlib.h> #include <stdio.h> #include <vector> using namespace std; int * addone(int *a,int n) { in

经典算法题每日演练——第十六题 Kruskal算法

原文:经典算法题每日演练--第十六题 Kruskal算法 这篇我们看看第二种生成树的Kruskal算法,这个算法的魅力在于我们可以打一下算法和数据结构的组合拳,很有意思的. 一:思想 若存在M={0,1,2,3,4,5}这样6个节点,我们知道Prim算法构建生成树是从”顶点”这个角度来思考的,然后采用“贪心思想” 来一步步扩大化,最后形成整体最优解,而Kruskal算法有点意思,它是站在”边“这个角度在思考的,首先我有两个集合. 1. 顶点集合(vertexs): 比如M集合中的每个元素都可以认

【leetcode 简单】 第九十一题 找不同

给定两个字符串 s 和 t,它们只包含小写字母. 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母. 请找出在 t 中被添加的字母. 示例: 输入: s = "abcd" t = "abcde" 输出: e 解释: 'e' 是那个被添加的字母. class Solution(object): def findTheDifference(self, s, t): """ :type s: str :type t: str :

【leetcode 简单】 第六十五题 2的幂

给定一个整数n,判断它是否为2的次方幂. 方法:2,4,8都是2的n次幂 任何整数乘以2,都相当于向左移动了一位,而2的0次幂为1,所以2的n次幂就是1向左移动n位.这样,2的幂的特征就是二进制表示只有最高位为1,其他位均为0.二进制标下形式为: 10    100    1000 减1后与自身进行按位与,如果结果为0,表示这个数是2的n次幂 01    011    0111 结果: 10&01 = 0    100&011 = 0   1000&0111 = 0 class S

【leetcode 简单】第三十六题 相交链表

编写一个程序,找到两个单链表相交的起始节点. 例如,下面的两个链表: A: a1 → a2 c1 → c2 → c3 B: b1 → b2 → b3 在节点 c1 开始相交. 注意: 如果两个链表没有交点,返回 null. 在返回结果后,两个链表仍须保持原有的结构. 可假定整个链表结构中没有循环. 程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存. /** * Definition for singly-linked list. * struct ListNode { * int va

【leetcode 简单】 第六十六题 用栈实现队列

使用栈实现队列的下列操作: push(x) -- 将一个元素放入队列的尾部. pop() -- 从队列首部移除元素. peek() -- 返回队列首部的元素. empty() -- 返回队列是否为空. 示例: MyQueue queue = new MyQueue(); queue.push(1); queue.push(2); queue.peek(); // 返回 1 queue.pop(); // 返回 1 queue.empty(); // 返回 false 说明: 你只能使用标准的栈操