例如:数字
一个整数
若干个整数,表示答案。
100
99 100 110
的连续相同数字个数都为
,其他的
内的数字的连续相同数字个数为
999
999 1000
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
//本题的坑,n的范围是(10²到10¹²),java中需要用long接收,int【 2×10⁹】范围不够
long n = in.nextLong();
List<String> num = new ArrayList<>(); // 存储连续相同数字的数组
int maxInt = 0; // 最大连续相同数
// 根据 n 进行循环,最外层的for循环中i表示[n-10,n+10]的所有整数,需要从n-10开始,因为最后的输出是从小到大的
for(long i = n - 10;i <= n+10;++i){
// long转字符串方便操作
String j = Long.toString(i);
int sum = 0; // 用于统计下面for循环中的最大连续相同数【注意,它和上面的maxInt不一样,sum是局部的,maxInt是全局的】
for(int x = 0;x < j.length()-1;++x){
// 因为有y = x + 1的条件,为了防止索引溢出,需要让 x < j.length()-1
int y = x + 1;
if(j.charAt(x) == j.charAt(y)){
sum++;
// 如果局部的等于全局的 最大连续相同数,即需要记录到num中
if(sum == maxInt){
num.add(j);
// 如果局部的大于全局的,即出现了新的 最大连续相同数,需要清空旧的num列表,再重新开始记录,并且把全局的最大值+1
}else if(sum > maxInt){
num.clear(); // 将num数组清空,因为拥有更多相同数字的数字出现了
maxInt++;
num.add(j);
// 如果局部的小于全局的,即不符合 拥有连续的相同的数字最多的数字 条件,继续循环调试
}else{
continue;
}
}
}
}
// 最后输出结果
for(String z : num){
System.out.print(z + " ");
}
}
}