leetcode刷题Day5

leetcode刷题Day5
38.Excel表列序号
给你一个字符串 columnTitle ,表示 Excel 表格中的列名称。返回该列名称对应的列序号 。

  • 示例:输入: columnTitle = “A”; 输出: 1
class Solution:
    def titleToNumber(self, columnTitle: str) -> int:
        result = 0
        for i in columnTitle:
            result = result * 26 + ord(i) - ord("A") + 1
        return result

39.颠倒二进制位
颠倒给定的 32 位无符号整数的二进制位。

  • 示例:输入:n = 00000010100101000001111010011100
  • 输出:964176192 (00111001011110000010100101000000)
  • 解释:输入的二进制串00000010100101000001111010011100 表示无符号整数 43261596,
    因此返回 964176192,其二进制表示形式为 00111001011110000010100101000000。
class Solution:
    def reverseBits(self, n: int) -> int:
        result = 0
        for i in range(32):
            result = (result << 1) + (n & 1)
            n >>= 1
        return result

注:n从高位往左,result从低位往右。

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

  • 示例:输入:head = [1,2,6,3,4,5,6], val = 6 ; 输出:[1,2,3,4,5]
class Solution:
    def removeElements(self, head: Optional[ListNode], val: int) -> Optional[ListNode]:
        dummy_node = ListNode(0) 
        dummy_node.next = head  # 创建一个虚拟头节点
        cur_node = dummy_node
        while cur_node.next:
            if cur_node.next.val == val:
                cur_node.next = cur_node.next.next
            else:
                cur_node = cur_node.next
        return dummy_node.next # 虚拟头节点的下一节点才是真正的头节点

41.同构字符串
给定两个字符串 s 和 t ,判断它们是否是同构的。
如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。
每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。

  • 示例:输入:s = “egg”, t = “add”; 输出:true
class Solution:
    def isIsomorphic(self, s: str, t: str) -> bool:
        if len(s) != len(t): return False
        s_map, t_map = {}, {}
        for i in range(len(s)):
            s_char = s[i]
            t_char = t[i]
            if s_char in s_map:
                if s_map[s_char] != t_char:
                    return False
            else:
                if t_char in t_map:
                    return False
                s_map[s_char] = t_char
                t_map[t_char] = s_char
        return True

42.反转链表
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
在这里插入图片描述

  • 示例:输入:head = [1,2,3,4,5]; 输出:[5,4,3,2,1]
class Solution:
    def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
        stack = list()
        h = head
        while h:
            stack.append(h)
            h = h.next
        reverse = ListNode()
        dummy = reverse
        while stack:
            node = stack.pop()
            node.next = None
            dummy.next = node
            dummy = dummy.next
        return reverse.next

43.存在重复元素II
给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 i 和 j ,满足 nums[i] == nums[j] 且 abs(i - j) <= k 。如果存在,返回 true ;否则,返回 false 。

  • 示例:输入:nums = [1,2,3,1], k = 3; 输出:true
class Solution:
    def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool:
        dict_hash = {}
        for i in range(len(nums)):
            if nums[i] in dict_hash and abs(i - dict_hash[nums[i]]) <= k:
                return True
            else:
                dict_hash[nums[i]] = i
        return False

44.完全二叉树的节点个数
给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。
完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2^h 个节点。
在这里插入图片描述

  • 示例:输入:root = [1,2,3,4,5,6]; 输出:6
class Solution:
    def countNodes(self, root: Optional[TreeNode]) -> int:
        if not root: return 0
        nodes = self.inorderTraversal(root)
        return len(nodes)
        

    def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        if root is None: return []
        nodes = []
        nodes.append(root.val)
        nodes += self.inorderTraversal(root.left)
        nodes += self.inorderTraversal(root.right)
        return nodes

45.翻转二叉树
给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。
在这里插入图片描述

  • 示例:输入:root = [4,2,7,1,3,6,9]; 输出:[4,7,2,9,6,3,1]
class Solution:
    def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
        if root is None: return None

        root.left, root.right = root.right, root.left
        root.left = self.invertTree(root.left)
        root.right = self.invertTree(root.right)
        return root

46.2的幂
给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。
如果存在一个整数 x 使得 n == 2^x ,则认为 n 是 2 的幂次方。

  • 示例:输入:n = 1; 输出:true; 解释:20 = 1
import math
class Solution:
    def isPowerOfTwo(self, n: int) -> bool:
        if n <= 0: return False
        return math.log2(n).is_integer()

47.回文链表
给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。
在这里插入图片描述

  • 示例:输入:head = [1,2,2,1]; 输出:true
class Solution:
    def isPalindrome(self, head: Optional[ListNode]) -> bool:
        list1, list2 = [], []
        while head:
            list1.append(head.val)
            list2.append(head.val)
            head = head.next
        list2.reverse()
        return list1 == list2

48.有效的字母异位词
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。

  • 示例:输入: s = “anagram”, t = “nagaram”; 输出: true
class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        if len(s) != len(t): return False
        s_count = collections.Counter(s)
        t_count = collections.Counter(t)
        return s_count == t_count
  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值