代码随想录刷题第三十七天
单调递增的数字 (LC 738)
题目思路:
本题也很难想到解法,从后往前如果后一位比前一位小,则不是递增数;将前一位减一,后一位变为九,使该数字变为单调递增数字,非常巧妙的思路
代码实现:
class Solution:
def monotoneIncreasingDigits(self, n: int) -> int:
strNum = str(n)
flag = len(strNum)
for i in range(len(strNum)-1, 0, -1):
if strNum[i-1]>strNum[i]:
strNum = strNum[:i-1]+str(int(strNum[i-1])-1)+strNum[i:]
flag = i
strNum = strNum[:flag] + ''.join(['9' for _ in range(flag, len(strNum))])
return int(strNum)
监控二叉树 (LC 968)
题目思路:
**本题巨难!!!需要想到三个状态 **
- 0:该节点无覆盖
- 1:该节点有摄像头
- 2:该节点有覆盖
还需要想到4种状况,且终止条件是空节点为2
代码实现:
class Solution:
def __init__(self):
self.count = 0
def minCameraCover(self, root: Optional[TreeNode]) -> int:
head = self.traversal(root)
if head==0:
root.val=1
self.count+=1
return self.count
def traversal(self, root):
if root is None:
return 2
left = self.traversal(root.left)
right = self.traversal(root.right)
if left==2 and right==2:
return 0
if left==0 or right==0:
self.count+=1
return 1
if left==1 or right==1:
return 2