python_lintcode_简单题_365.181.55

365 二进制中有多少个1

题目:计算在一个 32 位的整数的二进制表示中有多少个 1.

样例
给定 32 (100000),返回 1
给定 5 (101),返回 2
给定 1023 (111111111),返回 9

思路:主要用到了bin,十进制->二进制,生成的是(-)0bxx的字符串,所以后面可以将0b replace ”

class Solution:
    # @param num: an integer
    # @return: an integer, the number of ones in num
    def countOnes(self, num):
        # write your code here
        if num==1:
            return 1
        if num==0:
            return 0
        str_num=bin(num).replace('0b','')  //将0b转空
        if num>0:                       
            return str_num.count('1')
        return 32-str_num.count('0')

181 将整数A转换为B

题目:如果要将整数A转换为B,需要改变多少个bit位?

注意事项
Both n and m are 32-bit integers.

样例
如把31转换为14,需要改变2个bit位。

(31)10=(11111)2
(14)10=(01110)2

思路:由于负数和整数比较时,有点麻烦,我可以将每个数都补充到32位,然后再循环,找到不同的bit位,即为需要改变的。

class Solution:
    """
    @param a, b: Two integer
    return: An integer
    """
    def bitSwapRequired(self, a, b):
        # write your code here
        if a == b : return 0
        strA=self.bu(a)
        strB=self.bu(b)
        n = len(strA)
        count = 0
        for i in range(-1,-n-1,-1):     //循环
            if strA[i] != strB[i]:
                count += 1
        return count

    def bu(self,a):              //根据正负进行补充01
        if a>0:
            b='0b'
            c='0'
        else:      
            b='-0b'
            c='1'
        stra=bin(a).replace(b,'')
        stra=(32-len(stra))*c+stra
        return stra

55比较字符串

题目:比较两个字符串A和B,确定A中是否包含B中所有的字符。字符串A和B中的字符都是 大写字母

注意事项
在 A 中出现的 B 字符串里的字符不需要连续或者有序。

给出 A = “ABCD” B = “ACD”,返回 true
给出 A = “ABCD” B = “AABC”, 返回 false

class Solution:
    """
    @param A : A string includes Upper Case letters
    @param B : A string includes Upper Case letters
    @return :  if string A contains all of the characters in B return True else return False
    """
    def compareStrings(self, A, B):
        # write your code here
        A=list(A);B=list(B);i=0;
        while i<len(B):
            if  B[i]  in A:      #若B内的值在A,删除A中的B
                del A[A.index(B[i])]
            else:
                return False
            i+=1
        return True

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值