甲回文数或数字回文是像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?
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; }