干货分享 | 打印回文数的四种方法!!
本文提供了四种方法来打印回文数,大家可以根据题目的要求(如:时间复杂度、运行时间、内存等限制条件)来选取合适的方法。如果题目要求打印的回文数较大,我们可以选择将数字转换为字符串的形式,这样就避免了数字过大而溢出;当然,打印的回文数没有超出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结尾