一、738.单调递增的数字
给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。
(当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。)
示例 1:
- 输入: N = 10
- 输出: 9
1.对于Integer,parseInt
Integer.parseInt
2.对于String.split()
Java对 加 运 算 符 进 行 了 扩 展 ,使 它 能 够 进 行 字 符 串 的连 接,如 "abc"+"de",得到 串 "abcde"。
当然会把其他类型的也会转为字符串型,所以整形数 + 字符串会变成一个字符串。
所以此题是先把这个整数变成字符串再做处理。
String[] strings = (N + "").split("");
Java中可以利用split把字符串按照指定的分割符进行分割,然后返回字符串数组。
具体方法:参照博客
3.整型数据如何转换成字符串
- 在 Java 中使用 String.valueOf(number) 把整数转换成字符串
- 在 Java 中使用字符串连接法将整数转换成字符串
- 在 Java 中使用 Integer.toString(number) 把整数转换为字符串
- 结论: Integer.toString(number) 将整数转换成字符串
//第一种方法 最简便
str = i + "";
System.out.println("str="+str);
//第二种方法
Integer it = new Integer(i);
str = it.toString();
System.out.println("str="+str);
//第三种方法
str = Integer.toString(i);
System.out.println("str="+str);
//第四种方法
str = String.valueOf(i);
System.out.println("str="+str);
4.toCharArray()的用法
5.String.join()方法
string里边的Join()方法
就是将传入的字符串数组(必须是字符串string) value,用特定的分隔符 separator 进行分割
例: List<string> list = new List<string>();
list.add("aa");
list.add("bb");
list.add("cc");
Console.WriteLine(string.Join("-", list));
输出的结果就是 aa-bb-cc
6.代码
class Solution {
public int monotoneIncreasingDigits(int n) {
String str1=n+"";
String []string=str1.split("");
int start=string.length;
for(int i=string.length-1;i>0;i--)
{
if(Integer.parseInt(string[i])<Integer.parseInt(string[i-1])){
string[i-1]=(Integer.parseInt(string[i-1])-1)+"";
start=i;
}
}
for(int i=start;i<string.length;i++)
{
string[i]="9";
}
return Integer.parseInt(String.join("",string));
}
}
采用String.valueOf方法来实现:
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.监控二叉树
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
int count=0;
public int minCameraCover(TreeNode root) {
if(minCame(root)==0)
{
count++;
}
return count;
}
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;
if(left==0||right==0)
{
count++;
return 1;
}
if(left==1||right==1)
{
return 2;
}
return -1;
}
}