LeetCode—哈希1

1. 349_两个数组的交集

题目来源:力扣

题目描述:给定两个数组 nums1nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序

代码,

class Solution(object):
    def intersection(self, nums1, nums2):
        """
        :type nums1: List[int]
        :type nums2: List[int]
        :rtype: List[int]
        """
        r = list(set(nums1) & set(nums2))
        return r 

2. 202_快乐数

题目来源:力扣

编写一个算法来判断一个数 n 是不是快乐数。

「快乐数」 定义为:

对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
如果这个过程 结果为 1,那么这个数就是快乐数。
如果 n 是 快乐数 就返回 true ;不是,则返回 false 。

题解:

首先找出一个数所有的数字;计算平方和;有两种终止情况:1)和为1;2)无限循环。

代码,

class Solution(object):
    def isHappy(self, n):
        """
        :type n: int
        :rtype: bool
        n_exist: 记录出现过的求和数字
        element:一个数中个位、十位、百位。。。出现的式子
        sum_n:平方和
        """
        n_exist = [n]
        element = self.findElement(n)
        sum_n = self.cal_square_sum(element)
        while sum_n != 1:
            if sum_n in n_exist:
                return False
            n_exist.append(sum_n)
            element = self.findElement(sum_n)
            sum_n = self.cal_square_sum(element)
        return True

    # 得到当前数值中所有的数字
    def findElement(self, n):
        element = []
        while n >= 10:
            element.append(n % 10)
            n = int(n/10)
        if n != 0:
            element.append(n)
        return element

    # 计算平方和
    def cal_square_sum(self, element):
        sum_n = 0
        for i in range(len(element)):
            sum_n += element[i]**2
        return sum_n

if __name__ == '__main__':
    s = Solution()
    r = s.isHappy(2)
    print(r)

    # ele = s.findElement(100)
    # print(ele)

3. 1_两数之和

题目来源:力扣

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

题解

注意,两数之和不一定为正数,这里的和是广义的和,也可能是减法。因此,找到Target-nums[i]是关键,只要找到,返回即可。

class Solution(object):
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        : dic: {Target-n_index: index}
        """
        dic = {}
        for i in range(len(nums)):
            if nums[i] in dic.keys():
                return [i, dic[nums[i]]]
            left_target = target - nums[i]
            dic.setdefault(left_target, i)
        return

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值