数位算法

本文深入探讨了多种高效算法的实现,包括快速幂运算、查找只出现一次的数字、判断快乐数、计算质数数量以及汉明距离计算。通过具体实例展示了算法的精妙之处,为读者提供了丰富的代码实践案例。

数位算法

快速幂

#快速幂
class Solution:
    def myPow(self, x: float, n: int) -> float:
        a = 1
        flag = 1
        if n<0:
            flag = 0
            n = abs(n)
        while n:
            if n&1:
                a = a*x
            n >>=1
            x = x*x
        return a if flag else 1/a

只出现一次的数字

class Solution:
    def singleNumber(self, nums: List[int]) -> int:
        #reduce对后面的函数进行累积
        return reduce(lambda x,y: x^y ,nums)

快乐数

class Solution:
    def isHappy(self, n: int) -> bool:
        # 初始化 visited
        visited = set()
        # 当 n != 1,并且没见过 n 时进行判断
        while n != 1 and n not in visited:
            # 把 n 放入 visited
            visited.add(n)
            # 计算下一轮的数字
            nxt = 0
            # 计算 n 的各位数字平方和
            while n != 0:
                nxt += (n % 10) ** 2
                n //= 10
            # 把下一轮的数字设定为 n
            n = nxt
        # 判断 n 的最终结果是否为 1
        return n == 1

计数质数

class Solution:
    def countPrimes(self, n: int) -> int:
        if n<2:
            return 0
        isprime = [1]*n
        isprime[0] = isprime[1] = 0
        for i in range(2,int(n**0.5)+1):
            if isprime[i]:
                #i*i到n的以i为间隔的(n-1-i*i)//i +1个数全部赋给0
                #也就是i这个数的倍数全部为0
                isprime[i*i:n:i] = [0]*((n-1-i*i)//i+1)
        return sum(isprime)

汉明距离

class Solution:
    def hammingDistance(self, x: int, y: int) -> int:
        xor = x ^ y
        distance = 0
        while xor:
            xor &= xor-1
            distance +=1
        return distance 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值