zoukankan      html  css  js  c++  java
  • 【Leetcode】数学系列

    【Leetcode-9】

    一、题目:回文数

      给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。

      回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。

    二、代码:

    def isPalindrome(self, x: int) -> bool:
            """
            可转为字符串再判断,但需额外空间。
            考虑取数字的后一半,与前一半进行对比,若相等则为回文数
            1.负数不可能为回文数,
            2.当数字后一半>=前一半时已经取得后一半数字,后一半可能多一位 
            3.当最后一位为0时,用last//10得到前面为0,会认为相等,但第一位不可能为0,所以最后一位为0直接返回False
            4.只有1个0需要返回True
            """
            if x == 0:
                return True
            if x < 0 or x % 10 == 0:
                return False
            last = 0
            while last < x:
                last = last*10 + x%10
                x //= 10
            if last == x or last // 10 == x:
                return True
            return False

    【Leetcode-136】

    一、题目:只出现一次的数字

      给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

      说明:

      你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

    二、代码:

    def singleNumber(self, nums: List[int]) -> int:
            ans = nums[0]
            for num in nums[1:]:
                ans = ans ^ num
            return ans

    【Leetcode-326】

    一、题目:3的幂

      给定一个整数,写一个函数来判断它是否是 3 的幂次方。如果是,返回 true ;否则,返回 false 。

    二、代码:

    def isPowerOfThree(self, n: int) -> bool:
            """
            若为3的幂,则一直除3最后商为1,特殊情况是3的0次方为1
            """
            if n == 1:
                return True
            if n % 3 != 0:
                return False
            while n >= 3:
                n = n / 3
            if n == 1:
                return True
            else:
                return False

    【Leetcode-338】

    一、题目:比特位计数

      给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。

    二、代码:

    def countBits(self, num: int) -> List[int]:
            res = []
            for item in range(num+1):
                t = 0
                p = item
                while p:
                    p = p & (p-1)
                    t += 1
                res.append(t)
            return res

    【Leetcode-461】

    一、题目:汉明距离

      两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。

      给出两个整数 x 和 y,计算它们之间的汉明距离。

    二、代码:

    def hammingDistance(self, x: int, y: int) -> int:
            xor = x ^ y
            n = 0
            while xor:
                xor = xor & (xor-1)
                n += 1
            return n

    【Leetcode-470】

    一、题目:用rand7实现rand10

      已有方法 rand7 可生成 1 到 7 范围内的均匀随机整数,试写一个方法 rand10 生成 1 到 10 范围内的均匀随机整数。

    二、代码:

    def rand10(self):
            """
            基本原理:
                0:randX可均匀生成1-X
                1.(randY-1)*X + randX可生成rand(X*Y)
                2.拒绝采样后生成的概率依然是相同的
                3.randX是均匀分布时,randX%n+1依然是randn均匀分布,X需要能整除n
            """
            while True:  # 直到生成满足条件的
                x = rand7()
                y = rand7()
                num = (y-1)*7 + rand7() # 1-49 
                if num <= 40:
                    return num % 10 + 1
                # num 41-49
                num = num - 40  # rand9
                num = (num-1)*7 + rand7()  # rand63
                if num <= 60:
                    return num % 10 + 1
                # num 61-63
                num = num - 60  # rand3
                num = (num-1)*7 + rand7()  # rand21
                if num <= 20:
                    return num % 10 + 1
    博文转载请注明出处。
  • 相关阅读:
    洛谷 P2756 飞行员配对方案问题 (二分图匹配)
    HDU 1879 继续畅通工程 (最小生成树)
    POJ 3090 Visible Lattice Points (欧拉函数)
    SPOJ VFMUL
    洛谷 P3803 【模板】多项式乘法(FFT)
    JAVA MyBatis 逆向工程 遇到的坑
    RabbitMQ遇到的坑
    .net webapi action拦截器 统计action耗时
    CEFCharp下载问题
    【进击.NET高级程序员之路】【二】
  • 原文地址:https://www.cnblogs.com/EstherLjy/p/14672436.html
Copyright © 2011-2022 走看看