738.单调递增的数字
暴力解法超时
贪心解法:从后向前遍历,如果出现strNum[i - 1] > strNum[i]的情况(非单调递增),让strNum[i - 1]--,然后strNum[i]给为9
class Solution:def monotoneIncreasingDigits(self, n: int) -> int:str_num = list(str(n))flag = len(str_num)for i in range(len(str_num)-1, 0, -1):if str_num[i-1] > str_num[i]:flag = istr_num[i-1] = str(int(str_num[i-1]) - 1)for i in range(flag, len(str_num)):str_num[i] = '9'return int("".join(str_num))
968.监控二叉树
从叶子节点开始遍历,使用后序遍历 左右中
设置三种状态
- 0 无覆盖
- 1 有摄像头
- 2 有覆盖
空节点设置为有覆盖。每次根据左右节点状态判定当前状态,三种状态一共9种组合,一一判断,写代码时综合一下。
最后还需要根据返回的根节点状态判定是否需要添加摄像头
class Solution:def __init__(self):self.result = 0def minCameraCover(self, root: Optional[TreeNode]) -> int:if self.traversal(root) == 0:self.result += 1return self.resultdef traversal(self, cur):if not cur:return 2left = self.traversal(cur.left)right = self.traversal(cur.right)if left == 2 and right == 2:return 0elif left == 0 or right == 0:self.result += 1return 1else:return 2