题目:

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

这天小明正在学数数。

他突然发现有些止整数的形状像一挫 “山”, 比如 123565321 ,145541, 它 们左右对称 (回文) 且数位上的数字先单调不减, 后单调不增。

小朋数了衣久也没有数完, 他惒让你告诉他在区间[2022,2022222022] 中有 多少个数的形状像一座 “山”。
运行限制

  • 最大运行时间:1s
  • 最大运行内存: 512M

代码:

public class shan {
public static void main(String[] args) {
int sum=0;
for (int i=2022;i<=2022222022;i++){
String s=i+""; //将数字转化为字符串也可以用Integer.toString(i)
if (huiwen(s)&&dizeng(s)) {
sum++; //存储符合要求的回文数字的数目
}
}
System.out.println(sum);

}
public static boolean huiwen(String s){ //判断是否是回文
StringBuilder stringBuilder=new StringBuilder(s);
stringBuilder.reverse(); //将字符串进行反转
return s.equals(stringBuilder.toString()); //反转后是以字符数组的形式进行存储的,所以要转成字符串。
}
public static boolean dizeng(String s){ //判断是否符合先单调不减, 后单调不增。由于是回文数所以判断一半即可。
int a=s.length();
for (int i=0;i<a-a/2;i++){
if (i>0&&s.charAt(i-1)>s.charAt(i)){
return false;
}
}
return true;
}

}

思路:

暴力解法遍历每一个数,先判断是否是回文数再判断是否符合先单调不减, 后单调不增。

判断回文的时候用到了StringBuilder中的reverse方法将字符串进行反转。

由于是暴力解法所以代码运行时间较长(我运行了一分半时间左右),但本题是填空题,作答时直接输出答案即可。

答案是:3138