738.单调递增的数字

理清楚思路就好写代码,只要前一位大于后一位,例如ab,那改变以后就为(a-1)9,所以纪录最靠前的那位大于下位的数减一,后面全部改为9

class Solution {public:int monotoneIncreasingDigits(int n) {string strNum = to_string(n);int flag = strNum.size();for (int i = flag-1; i >= 1; i--){if (strNum[i] < strNum[i-1]){flag = i;strNum[i-1]--;}}for (int i = flag; i < strNum.size();i++){strNum[i] = '9';}return stoi(strNum);}};

968.监控二叉树

首先排除叶节点安装监控,所以然后情况分类,思路解决后代码就好写了

class Solution {private:int result;int traversal(TreeNode* cur) {// 空节点,该节点有覆盖if (cur == NULL) return 2;int left = traversal(cur->left);// 左int right = traversal(cur->right);// 右// 情况1// 左右节点都有覆盖if (left == 2 && right == 2) return 0;// 情况2// left == 0 && right == 0 左右节点无覆盖// left == 1 && right == 0 左节点有摄像头,右节点无覆盖// left == 0 && right == 1 左节点有无覆盖,右节点摄像头// left == 0 && right == 2 左节点无覆盖,右节点覆盖// left == 2 && right == 0 左节点覆盖,右节点无覆盖if (left == 0 || right == 0) {result++;return 1;}// 情况3// left == 1 && right == 2 左节点有摄像头,右节点有覆盖// left == 2 && right == 1 左节点有覆盖,右节点有摄像头// left == 1 && right == 1 左右节点都有摄像头// 其他情况前段代码均已覆盖if (left == 1 || right == 1) return 2;// 以上代码我没有使用else,主要是为了把各个分支条件展现出来,这样代码有助于读者理解// 这个 return -1 逻辑不会走到这里。return -1;}public:int minCameraCover(TreeNode* root) {result = 0;// 情况4if (traversal(root) == 0) { // root 无覆盖result++;}return result;}};