0208leetcode刷题5道python

1208

题目描述:
给你两个长度相同的字符串,s 和 t。
将 s 中的第 i 个字符变到 t 中的第 i 个字符需要 |s[i] - t[i]| 的开销(开销可能为 0),也就是两个字符的 ASCII 码值的差的绝对值。
用于变更字符串的最大预算是 maxCost。在转化字符串时,总开销应当小于等于该预算,这也意味着字符串的转化可能是不完全的。
如果你可以将 s 的子字符串转化为它在 t 中对应的子字符串,则返回可以转化的最大长度。
如果 s 中没有子字符串可以转化成 t 中对应的子字符串,则返回 0。

示例:
在这里插入图片描述
解答:

class Solution:
    def equalSubstring(self, s: str, t: str, maxCost: int) -> int:
        left = right = 0
        res = 0
        n = len(s)
        tmpcost = 0
        while right < n:
            tmpcost += abs(ord(s[right])-ord(t[right]))
            if tmpcost > maxCost:
                tmpcost -= abs(ord(s[left])-ord(t[left]))
                left += 1
            right += 1
            res = max(res, right - left)
        return res

剑指offer07

题目描述:
输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。

示例:
在这里插入图片描述
解答:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNode:
        if not preorder:
            return None
        loc=inorder.index(preorder[0])
        root=TreeNode(preorder[0])
        root.left=self.buildTree(preorder[1:loc+1],inorder[:loc])
        root.right=self.buildTree(preorder[loc+1:],inorder[loc+1:])
        return root

剑指offer55-I

题目描述:
输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。

示例:
在这里插入图片描述
解答:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def maxDepth(self, root: TreeNode) -> int:
        if not root:
            return 0
        if not root.left and not root.right:
            return 1
        L=self.maxDepth(root.left)+1
        R=self.maxDepth(root.right)+1
        return max(L,R)

剑指offer55-II

题目描述:
输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。

示例:
在这里插入图片描述
解答:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def isBalanced(self, root: TreeNode) -> bool:
        return self.treeHeight(root)>=0
    
    def treeHeight(self,root):
        if not root:
            return 0
        leftHeight=self.treeHeight(root.left)
        rightHeight=self.treeHeight(root.right)
        if leftHeight>=0 and rightHeight>=0 and abs(leftHeight-rightHeight)<=1:
            return max(leftHeight,rightHeight)+1
        else:
            return -1

剑指offer57-II

题目描述:
输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。
序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。

示例:
在这里插入图片描述
解答:

class Solution:
    def findContinuousSequence(self, target: int) -> List[List[int]]:
        res=[]
        l,r=1,2
        while l<r:
            a=[]
            sum=(l+r)*(r-l+1)/2
            if sum<target:
                r+=1
            elif sum>target:
                l+=1
            else:
                for i in range(l,r+1):
                    a.append(i)
                res.append(a)
                l+=1
                r+=1
        return res

猜你喜欢

转载自blog.csdn.net/yeqing1997/article/details/113663223