干货分享 | 打印回文数的四种方法!!
- 本文提供了四种方法来打印回文数,大家可以根据题目的要求(如:时间复杂度、运行时间、内存等限制条件)来选取合适的方法。如果题目要求打印的回文数较大,我们可以选择将数字转换为字符串的形式,这样就避免了数字过大而溢出;当然,打印的回文数没有超出Java可以表示的范围,下列的四种方法都可以实现。
- 下面以打印四位的回文数来举例。
方法一:
直接循环一个四位数的每一位,然后判断是否满足回文数要求。(注:要输出几位的回文数就需要几重循环)
public class Main {
public void Palindrome() {
for (int i = 1; i < 10; i++) {
for (int j = 0; j < 10; j++) {
for (int x = 0; x < 10; x++) {
for (int y = 0; y < 10; y++) {
if (i == y && j == x) {
System.out.println("" + i + j + x + y);
}
}
}
}
}
}
public static void main(String[] args) {
new Main().Palindrome();
}
}
方法二:
先将原数字转换成字符串,再逆转字符串,最后判断逆转前后的字符串是否相等。
public class Main {
public void Palindrome() {
for(int i = 1000;i < 10000;i++) {
String ans = i + ""; //数字转换为字符串
String reverse = new StringBuffer(ans).reverse().toString();//逆转字符串
if(ans.equalsIgnoreCase(reverse)) { //比较两个字符串是否相等
System.out.println(ans);
}
}
}
public static void main(String[] args) {
new Main().Palindrome();
}
}
方法三:
先将原数字逆转,然后判断逆转前后的数字是否相等。
public class Main {
public void Palindrome() {
for(int i = 1000;i < 10000;i++) {
int temp = i;
int reverse = 0;
while(temp != 0) {
int remain = temp % 10;
temp /= 10;
reverse = reverse * 10 + remain;
}
if(reverse == i) {
System.out.println(reverse);
}
}
}
public static void main(String[] args) {
new Main().Palindrome();
}
}
方法四:
将一个四位数的每一位存放在一个数组中,再依次取数组的两端元素并判断是否相等。
public class Main {
public void Palindrome() {
for(int i = 1000;i < 10000;i++) {
String temp = i + "";
char[] str = temp.toCharArray();//将字符串以单个字符存放在数组中
if(str[0] == str[3] && str[1] == str[2]) {
for(int j = 0;j < str.length;j++) {
System.out.print(str[j]);
}
System.out.println();
}
}
}
public static void main(String[] args) {
new Main().Palindrome();
}
}
补充:如需要降低循环的次数,进行如下判断
1、数字是否为负数
2、数字是否以0结尾