仅需循环
1
0
3
=
1000
10^3=1000
103=1000次即可找到所有符合要求的回文数哦!
具体思路:
- 分别从0~9遍历i,j,k三层循环
- ( i + j ) × 2 + k = n (i+j)\times2+k=n (i+j)×2+k=n代表五位十进制回文数,即 i j k j i i j k j i ijkji
- ( i + j + k ) × 2 = n (i+j+k)\times2 = n (i+j+k)×2=n代表六位十进制回文数,即 i j k k j i ijkkji ijkkji
- 每找到一个符合条件的特殊回文数就存到ArrayList中,最后进行排序并输出
具体代码如下:
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
StringBuilder paste; // 用于将符合条件的字符组合进行拼接
ArrayList<Integer> save = new ArrayList<>(); // 用于存储数字并排序
String temp;
for (int i = 0; i < 10; ++i)
for (int j = 0; j < 10; ++j)
for (int k = 0; k < 10; ++k) {
// 判断六位数或者五位数之和是否为n
if ((i + j) * 2 + k == n) { // 五位数
if (i == 0) continue; // 若开头为0则跳过
paste = new StringBuilder();
paste.append(i).append(j).append(k).append(j).append(i);
temp = paste.toString();
save.add(Integer.parseInt(temp));
}
if ((i + j + k) * 2 == n) { // 六位数
if (i == 0) continue; // 若开头为0则跳过
paste = new StringBuilder();
paste.append(i).append(j).append(k).append(k).append(j).append(i);
temp = paste.toString();
save.add(Integer.parseInt(temp));
}
}
// 排序并输出
save.sort((a , b) -> a - b);
for (int i : save) {
System.out.println(i);
}
}
}
小技巧:使用StringBuilder进行append比使用String对象一个个拼来的更快,因为String对象拼接时底层还是要创建StringBuilder对象,而且每拼接一次就创建一个(JVM底层实现就是如此)