leedcode 67 Add Binary

本文介绍了一种解决二进制求和问题的方法,通过Python实现两种不同的算法方案。第一种方案采用逐位相加的方式,并处理进位操作;第二种方案则利用Python内置函数进行高效转换。

 

67Add Binary    33.70%2进制下的求和

 

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Wed Jan 31 21:13:07 2018

@author: vicky
"""

class Solution:
    def addBinary(self, a, b):
        """
        :type a: str
        :type b: str
        :rtype: str
        """
        s=list(str(int(a)+int(b)))
        #sting不可变,list可变,所以把s转化成list接下来更方便
        #注意:int不能直接转换为list,要把int先转换为str,再用str转化为list
        s2=s
        k=len(s)-1
        while k>0:
            if s[k]>="2":#注意要打双引号
                s2[k]=str(int(s[k])-2)
                s2[k-1]=str(int(s[k-1])+1)
            k=k-1
        if s2[0]>="2":
            s2[0]=str(int(s[k])-2)
            s2.insert(0,"1") #注意insert用于list,sting直接用加号+就行
            #list.insert(index, obj)先位置,后对象
        return ''.join(s2) 


if __name__=="__main__":
    a="1111"
    b="1111"
    print(Solution().addBinary(a,b))

class Solution:
    def addBinary(self, a, b):
        """
        :type a: str
        :type b: str
        :rtype: str
        """
        return bin(int(a,2)+int(b,2))[2:]
        

int(x, base=10),把某进制数转换为十进制表示。
              其中,x表示字符串string或数字;base表示进制数,默认十进制,可改。
              eg:int(a,2)表示把取2进制的a转换为取十进制所对应的数,eg:int('1111',2)=15

bin(x):返回x的二进制的sting表示‘0b...‘,从第二个位置开始读起,x为 int 或者 long int 数字。
       eg:bin(30)='0b11110',提取时从第二个位置开始读起。

类型转换:
int->str:str(num)
str->list:list(string) 注意int不能直接转换为list,要把int先转换为str,再用str转化为list
          eval(string)
list->str: ''.join(string)

eval()函数:eval(expression[, globals[, locals]])将字符串str当成有效的表达式来求值并返回计算结果
          其中,expression -- 表达式。
               globals -- 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。
               locals -- 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。
         eg:eval('pow(2,2)')=4,
             eval("{1: 'a', 2: 'b'}")={1: 'a', 2: 'b'}


修改sting字符有三种方法:http://blog.youkuaiyun.com/saltriver/article/details/52194921
(因为sting不可变类型,不能用等号赋值改变)
1.将sting转换成list后修改值,然后用join组成新字符串
  join函数:str.join(sequence),其中sequence表示要连接的元素序列。eg:"-".join(("1","a"))
2.用replace函数:str.replace(old, new[, max]),eg:str.replace("is", "was")
             其中old表示将被替换的子字符串,
                new表示新字符串,用于替换old子字符串。
                max表示可选字符串, 替换不超过 max 次
3.序列切片:eg:string = 'abcdafg'
              newstr = string[:4] + '1' + string[5:] #abcd1fg
              

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值