如何找出所有回文数
回文数字或数字回文是一个“对称”数字,如16461,当它的数字反转时保持不变。
回文这个词来源于回文,它指的是一个像转子一样的词,在字母反转时保持不变。
第一个回文数(十进制)是:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22,
33, 44, 55, 66, 77, 88, 99, 101, 111,
121, 131, 141, 151, 161, 171, 181,
191, ...
如何找出以下所有回文数字,例如10000?
回文数字或数字回文是一个“对称”数字,如16461,当它的数字反转时保持不变。
回文这个词来源于回文,它指的是一个像转子一样的词,在字母反转时保持不变。
第一个回文数(十进制)是:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22,
33, 44, 55, 66, 77, 88, 99, 101, 111,
121, 131, 141, 151, 161, 171, 181,
191, ...
如何找出以下所有回文数字,例如10000?
还原您的推理。不要试图找到这些数字,而是创建它们。您可以简单地获取任何数字并镜像它(长度总是偶数),对于相同的数字,只需在两者之间添加0..9(对于具有奇数长度的数字)。
public static Set<Integer> allPalindromic(int limit) {
Set<Integer> result = new HashSet<Integer>();
for (int i = 0; i <= 9 && i <= limit; i++)
result.add(i);
boolean cont = true;
for (int i = 1; cont; i++) {
StringBuffer rev = new StringBuffer("" + i).reverse();
cont = false;
for (String d : ",0,1,2,3,4,5,6,7,8,9".split(",")) {
int n = Integer.parseInt("" + i + d + rev);
if (n <= limit) {
cont = true;
result.add(n);
}
}
}
return result;
}
public static boolean isPalindromic(String s, int i, int j) {
return j - i < 1 || s.charAt(i) == s.charAt(j) && isPalindromic(s,i+1,j-1);
}
public static boolean isPalindromic(int i) {
String s = "" + i;
return isPalindromic(s, 0, s.length() - 1);
}
public static boolean isPalindromic(int i) {
int len = (int) Math.ceil(Math.log10(i+1));
for (int n = 0; n < len / 2; n++)
if ((i / (int) Math.pow(10, n)) % 10 !=
(i / (int) Math.pow(10, len - n - 1)) % 10)
return false;
return true;
}