代码随想录算法训练营第三十七天| 738.单调递增的数字、968.监控二叉树

738.单调递增的数字

题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

解题思路:一旦出现strNum[i - 1] > strNum[i]的情况(非单调递增),首先想让strNum[i - 1]--,然后strNum[i]给为9,这样这个整数就是89,即小于98的最大的单调递增整数。举个例子,数字:332,从前向后遍历的话,那么就把变成了329,此时2又小于了第一位的3了,真正的结果应该是299。

java:

class Solution {
    public int monotoneIncreasingDigits(int n) {
        String s = String.valueOf(n);
        char[] chars = s.toCharArray();
        int start = s.length();
        for (int i = s.length() - 2; i >= 0; i--) {
            if (chars[i] > chars[i + 1]) {
                chars[i]--;
                start = i+1;
            }
        }
        for (int i = start; i < s.length(); i++) {
            chars[i] = '9';
        }
        return Integer.parseInt(String.valueOf(chars));
    }
}

968.监控二叉树

题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

java:

class Solution {
    int  res=0;
    public int minCameraCover(TreeNode root) {
        if(minCame(root)==0){
            res++;
        }
        return res;
    }
    public int minCame(TreeNode root){
        if(root==null){
            return 2;
        }
        int left=minCame(root.left);
        int  right=minCame(root.right);

        if(left==2&&right==2){
            return 0;
        }else if(left==0||right==0){
            res++;
            return 1;
        }else{
            return 2;
        }
    }
}

你可能感兴趣的:(算法)