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])

相关文章

学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习...
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面...
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生...
Can’t connect to local MySQL server through socket \'/v...
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 ...
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服...