classPalindromenumber {/** * Creates a map collection to store the data and then makes a judgment throw on the data */Private ValPalindromedata= Hashmap<int, arraylist<string>> ()/** * Speak the numbers directly into a string and then use the middle intercept of the string to compare it by two. FunIspalindromenumber (Number:long): Boolean {//single-digit direct return less than 100 palindrome number is divisible by 11 divide by 10 The number is definitely not a palindrome numberif(Number < 10)return Trueif(Number < 100)returnnumber!! % = = 0Lif(number!!% = = 0L)return FalseValNumbers = number.tostring () +"" /* Three-digit palindrome number for example: 121 131 151 and so on are the same before and after the same directly determine whether the same direct return * and then the number of matching rules in a key 5 map inside a list set to go * When number is 5 is a numeric time to judge Whether the last number of the first number is the same * the same is removed from the middle to compare * whether the set of key 5 in the map contains the remainder of the three digits have the rest of the return true conversely Flase * if true before returning to a K EY is a list of 7 for recursive dictionary processing * The palindrome number of even digits is similar to the palindrome number of the base digit, so it is not explained.if(Number > && number <= 999) {if(number/100 = = number% 10) {
(Palindromedata asJava.util.map<int, arraylist<string>>). Computeifabsent (5) {k-ArrayList ()}Palindromedata[5]!!. Add (Numbers)return True }Elsereturn False }if(Number >= 1001 && number <= 9999) {if(number/1000 = = number% && number/100% = = number% 100/10) {
(Palindromedata asJava.util.map<int, arraylist<string>>). Computeifabsent (6) {k-ArrayList ()}Palindromedata[6]!!. Add (Numbers)return True }return False }ValFirstnumber = numbers.substring (0, 1)ValLastnumber = numbers.substring (numbers.length-1, numbers.length)if(Firstnumber! = lastnumber)return FalseVallength = numbers.length ValsubString = numbers.substring (1, length-1)return if(Integer.parseint (subString) = = 0)true ElseIsmapdata (numbers, length, number, subString)}Private FunBaseispalindromenumber (numberfrist:string, Numberslast:string, numberslast2:string): Boolean {varNumbersLast2 = NumbersLast2vari = 0 while(I < Numberslast.length) {Valindex = Numberslast.length-I-1if(i = = 0)
{/* In order to avoid large data type traversal plus the first digit judgment if not the same direct return to reduce the number of times a data reversal needs to be recorded as n the length of the data to reduce the number of n/2-1 times */NumbersLast2 = NumbersLast2 + numberslast.substring (index)if(numberfrist.substring (0, 1)! = NumbersLast2)return False }Else{numbersLast2 = NumbersLast2 + numberslast.substring (index, index + 1)if(index = = 2 | | index = = 5 | | index = = 8) {if(numberfrist.substring (0, NumbersLast2.length)! = NumbersLast2)return False }} ++i}returnNumberfrist = = NumbersLast2}Private FunOlderispalindromenumber (Number:long): Boolean {//single-digit direct return less than 100 palindrome number is divisible by 11 evenly divided by 10 is definitely not a palindrome number//System.out. println (number+ "num");if(Number < 10)return Trueif(Number < 100)returnnumber!! % = = 0Lif(number!!% = = 0L)return FalseValNumbers = number.tostring () +"" SYSTEM.OUT.PRINTLN (numbers); /*system.out.println ("number = [" + numbers.length () + "]"); */ValHalfindex = numbers.length/2Valnumberfrist = numbers.substring (0, HalfIndex-1)varNumberslast ="" ValNumbersLast2 ="" The last string interception needs to be noted whether the string length is an even numberif(Numbers.length/2 = = 0) {numberslast = Numbers.substring (halfIndex-1)}Else{numberslast = numbers.substring (Halfindex + 1)}//System.out.println (numberfrist+ "ssss "+numberslast);returnBaseispalindromenumber (Numberfrist, Numberslast, NumbersLast2)}Private FunIsmapdata (numbers:string, Length:int, Number:long, substring:string): Boolean {if(Palindromedata[Length]! =NULL) {//System.out.println ("Notnull Sub:" +numbers.substring (1,length-1));if(Palindromedata[Length]!!. Contains (subString)) {(Palindromedata asJava.util.map<int, arraylist<string>>). Computeifabsent (length + 2) {k-, ArrayList ()}Palindromedata[Length + 2]!!. Add (Numbers)return True }Else{ValNext = Math.pow (10.0, (length-1). ToDouble ()). Tolong ()ValLast = Math.pow (10.0, (length-2). ToDouble ()). Tolong ()if(Number > Next + last + 11)return Falseif(Subispalindromenumber (Numbers)) {
(Palindromedata asJava.util.map<int, arraylist<string>>). Computeifabsent (length + 2) {k-, ArrayList ()}Palindromedata[Length + 2]!!. Add (Numbers)Palindromedata[Length]!!. Add (subString)return True }return False }
}Else{if(Subispalindromenumber (Numbers)) {
(Palindromedata asJava.util.map<int, arraylist<string>>). Computeifabsent (length + 2) {k-, ArrayList ()}Palindromedata[Length + 2]!!. Add (Numbers)return True }Elsereturn False }
}Private FunSubispalindromenumber (numbers:string): Boolean {ValHalfindex = numbers.length/2Valnumberfrist = numbers.substring (0, HalfIndex-1)varNumberslast ="" ValNumbersLast2 ="" The last string interception needs to be noted whether the string length is an even numberif(Numbers.length/2 = = 0) {numberslast = Numbers.substring (Halfindex)}Else{numberslast = numbers.substring (Halfindex)}returnBaseispalindromenumber (Numberfrist, Numberslast, NumbersLast2)}}