代码随想录刷题第六天|242.有效的字母异位词,349.两个字母的交集,202.快乐数,1.两数之和

本文介绍了几个Python编程中的常见问题解决方案,包括检查字符串是否为异位词(使用数组记录字符计数)、计算两个数组的交集(使用字典和集合方法)、判断数字是否为快乐数(利用快慢指针和取数值操作)以及查找两数之和(使用哈希映射)。
摘要由CSDN通过智能技术生成

242.有效的字母异位值(使用了数组)

class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        record=[0]*26
        for i in s:#ord转换为ASCII值
            record[ord(i)-ord('a')]+=1#肯定在数组范围内
        for i in t:
            record[ord(i)-ord('a')]-=1
        for i in range(26):
            if record[i]!=0:
                return False
        return True

调用库:

349.两个数组的交集

直接使用set 不仅占用空间比数组大,而且速度要比数组慢,set把数值映射到key上都要做hash计算的。数量大的时候才用set

class Solution:
    def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
        #使用字典和集合
        #使用字典即哈希表存储一个数组中所有的元素
        table={}
        for num in nums1:
            table[num]=table.get(num,0)+1
        #使用集合存储结果
        res=set()
        for num in nums2:
            if num in table:
                res.add(num)#集合的add函数
                del table[num]#节省空间
        return list(res)#返回列表形式

使用数组

class Solution:
    def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
       #使用数组
        count1=[0]*1001
        count2=[0]*1001
        result=[]
        for i in range(len(nums1)):
            count1[nums1[i]]+=1
        for i in range(len(nums2)):
            count2[nums2[i]]+=1
        for k in range(1001):
            if count1[k]*count2[k]>0:
                result.append(k)
        return result

202.快乐数

对取数值各个位上的单数操作要熟悉

class Solution:
    def isHappy(self, n: int) -> bool:
        record=set()
        while n not in record:
            record.add(n)
            n_str=str(n)#把n转换为字符串
            new_sum=0#用来存储
            for i in n_str:
                new_sum+=int(i)**2
            if new_sum==1:
                return True
            else:
                n=new_sum
        return False#无限循环跳出while但也表示始终变不到一

快慢指针 

class Solution:
    def isHappy(self, n: int) -> bool:
        #快慢指针
        slow=n
        fast=n
        while self.get_sum(fast)!=1 and self.get_sum(self.get_sum(fast)):
            slow=self.get_sum(slow)
            fast=self.get_sum(self.get_sum(fast))
            if slow==fast:
                return False#无限循环但始终变不到1
        return True#出现等于1

    def get_sum(self,n: int) ->int:
        new_sum=0
        while n:
            n,r=divmod(n,10)#循环将个位数取出,如取出个位十位变个位,divmod返回商和余数
            new_sum+=r**2
        return new_sum

1.两数之和

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        map_a = dict()
        k = len(nums)
        for i, num in enumerate(nums):
            if target - num in map_a:
                return [map_a[target - num], i]
            map_a[nums[i]] = i

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值