【leetcode刷题——快乐数、移除链表元素、同构字符串】

leetcode刷题——快乐数、移除链表元素、同构字符串

1,快乐数

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

「快乐数」 定义为:

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

示例 1:

输入:n = 19
输出:true
解释:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1
示例 2:

输入:n = 2
输出:false

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/happy-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

方法:快慢指针

class Solution:
    def isHappy(self, n: int) -> bool:
        def get_next(n):
            sum=0
            while(n):
                n,dight=divmod(n,10)
                sum+=dight**2
            return sum
        
        low=n
        fast=get_next(n)
        while(fast!=1 and low!=fast):
            low=get_next(low)
            fast=get_next(get_next(fast))
        return fast==1

2,移除链表元素

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。

示例 1:

输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]
示例 2:

输入:head = [], val = 1
输出:[]
示例 3:

输入:head = [7,7,7,7], val = 7
输出:[]

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/remove-linked-list-elements
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

class Solution:
    def removeElements(self, head: Optional[ListNode], val: int) -> Optional[ListNode]:
        while(head and head.val==val):
            head=head.next

        if not head:
            return head

        ans=head
        while(ans.next):
            if ans.next.val==val:
                ans.next=ans.next.next
            else:
                ans=ans.next
        return head

3,同构字符串

给定两个字符串 s 和 t ,判断它们是否是同构的。

如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。

每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。

示例 1:

输入:s = “egg”, t = “add”
输出:true
示例 2:

输入:s = “foo”, t = “bar”
输出:false
示例 3:

输入:s = “paper”, t = “title”
输出:true

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/isomorphic-strings
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

class Solution:
    def isIsomorphic(self, s: str, t: str) -> bool:
        if len(s)!=len(t):
            return False
        hash_dict1={}
        hash_dict2={}
        for i in range(len(s)):
            if s[i] not in hash_dict1:
                hash_dict1[s[i]]=t[i]
            else:
                if hash_dict1[s[i]]!=t[i]:
                    return False

        for i in range(len(t)):
            if t[i] not in hash_dict2:
                hash_dict2[t[i]]=s[i]
            else:
                if hash_dict2[t[i]]!=s[i]:
                    return False
        return True
class Solution:
    def isIsomorphic(self, s: str, t: str) -> bool:
        return len(set(s)) == len(set(t)) and len(set(s)) == len(set(zip(s, t)))

你可能感兴趣的:(链表,leetcode,数据结构)