[学习报告]《LeetCode零基础指南》

[学习报告]《LeetCode零基础指南》,第1张

  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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/571740.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)

保存