微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

LeetCode:每日一题【第四周】

8.22 ~ 8.28 尽量坚持刷力扣的每日一题,锻炼大脑思维。更新中~~

655. 输出二叉树【DFS + 模拟】

先递归求二叉树高度,然后再根据题目要求来模拟递归求答案数组。

AC代码

class Solution:
    def printTree(self, root: Optional[TreeNode]) -> List[List[str]]:
        def calDepth(rt: Optional[TreeNode]) -> int:
            if rt == None:
                return 0
            else:
                return max(calDepth(rt.left), calDepth(rt.right)) + 1
        height = calDepth(root) - 1
        
        m = height + 1
        n = 2 ** m - 1
        ans = [[''] * n for _ in range(m)] # 构造一个m * n大小的数组
        def dfs(rt: Optional[TreeNode], r: int, c: int) -> None:
            ans[r][c] = str(rt.val)
            if rt.left:
                dfs(rt.left, r + 1, c - 2 ** (height - r - 1))
            if rt.right:
                dfs(rt.right, r + 1, c + 2 ** (height - r - 1))
        
        dfs(root, 0, (n - 1) // 2)
        return ans

782. 变为棋盘

有难度,待更

1460. 通过翻转子数组使两个数组相等

思路

如果两个数组值都一样,而顺序不一样,可以通过无限次的翻转得到一样的数组,反之,则不能。于是只需要比较两个数组值是否相同即可。

AC代码

class Solution:
    def canBeEqual(self, target: List[int], arr: List[int]) -> bool:
        target.sort()
        arr.sort()
        return target == arr

658. 找到 K 个最接近的元素【自定义排序】

思路

讲数组按照abs(arr[i] -v)进行从小到大排序即为最接近x的k个元素,之后在对前k个数排序即为升序。

AC代码

class Solution:
    def findClosestElements(self, arr: List[int], k: int, x: int) -> List[int]:
        arr.sort(key=lambda v: abs(v - x))
        return sorted(arr[:k])

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐