贪心
1、738. 单调递增的数字
题目:
输入: n = 10
输出: 9
思路:
func monotoneIncreasingDigits(n int) int {
// 贪心,利用字符数组
s := strconv.Itoa(n)
ss := []byte(s)
leng := len(ss)
if leng <= 1 {
return n
}
for i:=leng-1; i>0; i-- {
if ss[i-1] > ss[i] {
ss[i-1] -= 1
for j:=i; j<leng; j++ {
ss[j] = '9'
}
}
}
res, _ := strconv.Atoi(string(ss))
return res
}
2、968. 监控二叉树
题目:
给定一个二叉树,我们在树的节点上安装摄像头。
节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。
计算监控树的所有节点所需的最小摄像头数量。
思路:
- 情况罗列清楚,代码随想录视频比题解好理解多了
- 0没覆盖,1摄像头,2有覆盖
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func minCameraCover(root *TreeNode) int {
// 贪心
res := 0
var backtrack func(*TreeNode) int
backtrack = func(node *TreeNode) int {
if node == nil {
return 2
}
left := backtrack(node.Left)
right := backtrack(node.Right)
if left == 2 && right == 2 {
return 0
}
if left == 0 || right == 0 {
res++
return 1
}
if left == 1 || right == 1 {
return 2
}
return -1
}
if backtrack(root) == 0 { res++ }
return res
}