基本数据类型都可以通过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));
}
}
要从下往上看,局部最优:让叶子节点的父节点安摄像头,所用摄像头最少,整体最优:全部摄像头数量所用最少
如何隔两个节点放一个摄像头
先来看看每个节点可能有几种状态:
有如下三种:
- 该节点无覆盖
- 本节点有摄像头
- 本节点有覆盖
我们分别有三个数字来表示:
- 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;
}
}
}