如果一个正整数自身是回文数,而且它也是一个回文数的平方,那么我们称这个数为超级回文数。
现在,给定两个正整数 L 和 R (以字符串形式表示),返回包含在范围 [L, R] 中的超级回文数的数目。
示例:
输入:L = "4", R = "1000"
输出:4
解释:
4,9,121,以及 484 是超级回文数。
注意 676 不是一个超级回文数: 26 * 26 = 676,但是 26 不是回文数。
代码示例:
public class test {
public static void main(String[] args) {
String start = "4";
String end = "100000";
int i = Integer.parseInt(start);
int i1 = Integer.parseInt(end);
List<Integer> list = new ArrayList<>();
while (i<=i1){
checking(i,list);
i++;
}
if (CollectionUtil.isNotEmpty(list)){
list.removeIf(i2 -> !isSquare(i2));
}
System.out.println("有"+list.size()+"个超级回文数");
System.out.println("他们分别是"+list);
}
private static void checking(int i, List<Integer> list) {
String s = String.valueOf(i);
if (s.length()>1){
//内置循环
boolean replay = replay(s);
if (replay){
list.add(i);
}
}else {
boolean square = isSquare(i);
if (square){
list.add(i);
}
}
}
private static boolean replay(String s) {
int i = 0;
while (i < s.length()/2){
if (s.substring(i,i+1).equals(s.substring(s.length()-i-1,s.length()-i))) {
i++;
}else {
return false;
}
}
return true;
}
private static boolean isSquare(int i) {
double a = 0;
try {
a = Math.sqrt(i);
} catch (Exception e) {
return false;
}
int b = (int) a;
if ( String.valueOf(b).length()>1 && a - b == 0 ){
return replay( String.valueOf(b) );
}
return a - b == 0;
}
}