今天的题都比较难
738. Monotone Increasing Digits
这道题的想法就是要把找数字转换成各个位的比较
Way1:
从后往前遍历,每次如果前一位比后一位大,则前一位需要减1,同时从当前位到最后一位置9
class Solution:
def monotoneIncreasingDigits(self, n: int) -> int:
num=list(str(n))
for i in range(len(num)-1,0,-1):
if int(num[i-1]) >int(num[i]):
num[i-1]=str(int(num[i-1])-1)
num[i:]='9'*(len(num)-i)
return int(''.join(num))
968. Binary Tree Cameras
这道题也是要转化,转化的是每个节点的状态
Way1:
首先叶子节点是不能放camera的。其次要从下往上遍历,所以要用postorder遍历。之后就是如果设计返回值了。状态有三种2覆盖1放摄像头0没摄像头没覆盖。之后就是判断这三种状态下应该怎么转换即可
class Solution:
def minCameraCover(self, root: Optional[TreeNode]) -> int:
self.res=0
def dfs(node):
if not node:
return 2
left=dfs(node.left)
right=dfs(node.right)
if left==2 and right==2:
return 0
if left==0 or right==0:
self.res+=1
return 1
if left==1 or right==1:
return 2
return -1
if dfs(root)==0:
self.res+=1
return self.res
总结:贪心算法没有一定之规,但是都是通过局部优化达到全局优化,基本的思路就是把当前的问题转化成常见的问题,比如变成状态判断,数字比较等等