@ 代码随想录算法训练营第6周(C语言)|Day37(贪心)
Day37、贪心(包含题目 738.单调递增的数字 968.监控二叉树 )
738.单调递增的数字
题目描述
给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。
题目解答
int monotoneIncreasingDigits(int n) {int buf[10]={0};int count=0;int flag=0;while(n>0){buf[count]=n%10;count++;n/=10;}for(int i=1;i<count;i++){if(buf[i]>buf[i-1]){buf[i]--;flag=i;}}for(int i=flag-1;i>=0;i--){buf[i]=9;}for(int i=count-1;i>=0;i--){n=n*10+buf[i];}return n;
}
题目总结
l先遍历数字将数字变成数组。
968.监控二叉树
题目描述
给定一个二叉树,我们在树的节点上安装摄像头。
节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。
计算监控树的所有节点所需的最小摄像头数量。
题目解答
int traversal(struct TreeNode*root,int*res){if(!root){return 2;}int left=traversal(root->left,res);int right=traversal(root->right,res);if(left==2&&right==2){return 0;}if(left==0||right==0){(*res)++;return 1;}if(left==1||right==1){return 2;}return -1;
}int minCameraCover(struct TreeNode* root) {int res=0;if(traversal(root,&res)==0){res++;}return res;
}
题目总结
贪心加递归。