[学习报告]《LeetCode零基础指南》(第一讲) 函数

  1. 不用加法对两个数相加(下面三题一样 因此总结到一起)
    leetcode 371. 两整数之和
    面试题17.01 不用加号的加法
    剑指offer 65 不用加减乘除做加法

解法一:过辣
解法二:亦或运算结合与运算 递归或循环 注意判断条件 以及python自身的特殊情况

class Solution(object):


    def getSum(self, a, b):
        """
        :type a: int
        :type b: int
        :rtype: int
        """
        # 方法一:过辣
        return a+b
        
        # 方法二:
        # 亦或操作^相当于无进位位的加法  
        # 与操作&再左移一位<<1相当于获取进位
        # a+b等价于上面两个操作相加 停止的条件是第二步左移直至无进位 
        if(b == 0):
        	return a
        return self.getSum(a ^ b, (a & b) << 1)
        
        # python方法二优化
        # 由于python 无int long 都是64位 因此操作需要复杂一些
        x=0xffffffff
        # 舍掉32位以上的
        a,b=a&x,b&x
        while b!=0:
            a,b=a^b,(a&b)<<1&x
        if a<=0x7fffffff:
            return a
        else:
        	# 负数的话 先和x亦或相当于每位取反 结果再取一次得到真正结果 相当于补码操作
            return ~(a^x)
  1. 递归乘法
    直接过辣
class Solution(object):
    def multiply(self, A, B):
        """
        :type A: int
        :type B: int
        :rtype: int
        """ 
        return A*B
  1. Pow(x, n)
    直接过辣
class Solution(object):
    def myPow(self, x, n):
        """
        :type x: float
        :type n: int
        :rtype: float
        """
        return pow(x,n)

4.开方Sqrt(x)
解法一:过辣 直接用上面第三题的1/2次方取整即可
解法二:二分查找 注意x=1和边界条件 最后return high 还是low 可以找个特殊值带入一下

        if x==1:
            return 1
        low=1
        high=x//2
        while low<=high:
            mid=(low+high)//2
            if mid*mid==x:
                return mid
            elif mid*mid<x:
                low=mid+1
            else:
                high=mid-1
                
        return high
  1. 返回两个数中较大的数值 不可以比较排序
    解法一: 判断 过辣
    解法二:数学解法 相加+相减的绝对值 然后除以2
class Solution(object):
    def maximum(self, a, b):
        """
        :type a: int
        :type b: int
        :rtype: int
        """
        return ((a + b) + abs(a - b)) // 2
        # return a if a>b else b
  1. 反转两次的数字
    咱就真反转两次 去掉0第一次反转后前面的0再比较
class Solution(object):
    def isSameAfterReversals(self, num):
        """
        :type num: int
        :rtype: bool
        """
        r1=list(reversed(str(num)))
        r1=int(''.join(r1))
        r2=list(reversed(str(r1)))
        r2=int(''.join(r2))

        return num == r2
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值