Leetcode 刷题 贪心算法

738. 单调递增的数字

 基本数据类型都可以通过String.valueOf()方法转化为字符串表示形式

// 返回boolean参数的字符串表示形式
String.valueOf(boolean b);
// 返回char参数的字符串表示形式
String.valueOf(char c);
// *返回char数组参数的字符串表示形式
String.valueOf(char[] data);
// 返回char数组特定子数组的字符串表示形式
String.valueOf(char[] data,int offset,int count);
// 返回double参数的字符串表示形式
String.valueOf(double d);
// 返回float参数的字符串表示形式
String.valueOf(float f);
// *返回int参数的字符串表示形式
String.valueOf(int i);
// 返回long参数的字符串表示形式
String.valueOf(long l);
// 返回Object参数的字符串表示形式
String.valueOf(Object obj);

String.valueOf()、toString()、强制类型转换(String)的区别

1. 基本数据类型转成字符串表示形式时,可以使用String.valueOf(num),但不能直接使用num.toString()方法(基本数据类型不具备方法和属性),也不能通过(String)进行强制类型转化;

如果非要使用,可以使用对应包装类的toString()方法,比如使用Integer.toString(int i)方法。

另外,还可以使用num + ""的方式将基本数据类型转换成字符串

2. 使用object.toString()时,必须保证obejct不是null值,否则会抛出NullPointerException异常。

3. 使用强制类型转换(String) object方法时, 需要注意的是类型必须能转成String类型,因此最好用instanceof做个类型检查,以判断是否可以转换,否则容易抛出ClassCastException。

4. String.valueOf(Object)是在Object.toString()的基础上实现的,其与Object.toString()方法的不同点在于,String.valueOf(Object)不用担心object是否为null这一问题
 

Integer的parseInt和valueOf的区别

Integer.parseInt()和Integer.valueOf()都是将成为String转换为Int

String str = "1";
System.out.println(Integer.valueOf(str));//1
System.out.println(Integer.parseInt(str));//1

Integer.parseInt(),返回一个原子类型int。
Integer.valueOf(),返回的是封装的Integer对象。

例如:98,一旦出现strNum[i - 1] > strNum[i]的情况(非单调递增),首先想让strNum[i - 1]--,然后strNum[i]给为9,这样这个整数就是89,即小于98的最大的单调递增整数。

class Solution {
    public int monotoneIncreasingDigits(int n) {
        String s = String.valueOf(n);
        char[] chars = s.toCharArray();
        int flag = s.length();

        for(int i = chars.length - 1; i > 0; i--){
            if(chars[i-1] > chars[i]){
                chars[i-1]--;
                flag = i;
            }
        }

        for(int i = flag; i < s.length(); i++){
            chars[i] = '9';
        }
        return Integer.parseInt(String.valueOf(chars));
    }
}

968. 监控二叉树 

要从下往上看,局部最优:让叶子节点的父节点安摄像头,所用摄像头最少,整体最优:全部摄像头数量所用最少

如何隔两个节点放一个摄像头

先来看看每个节点可能有几种状态:

有如下三种:

  • 该节点无覆盖
  • 本节点有摄像头
  • 本节点有覆盖

我们分别有三个数字来表示:

  • 0:该节点无覆盖
  • 1:本节点有摄像头
  • 2:本节点有覆盖

 空节点的状态只能是有覆盖,这样就可以在叶子节点的父节点放摄像头了

class Solution {
    int res = 0;
    public int minCameraCover(TreeNode root) {
       if(postOrder(root) == 0){
           res++;
       }
       return res;
    }

    private int postOrder(TreeNode root){
        if(root == null){
            return 2;
        }
        int left = postOrder(root.left);
        int right = postOrder(root.right);

        if(left == 2 && right == 2){
            return 0;
        }else if(left == 0 || right == 0){
            res++;
            return 1;
        }else{
            return 2;
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值