Public classPalindromenumber {/** * Create a map collection to store data and then judge the data to throw.PrivateMap<integer, list<string>>Palindromedata=NewHashmap<> (); /** * The number directly into a string and then through the middle of the string intercept by two to compare the resultsPublic BooleanIspalindromenumber (Long number) {//Single-digit directly returns less than 100 palindrome number is divisible by 11 divisible by 10 is definitely not a palindrome numberif(Number < 10)Return true;if(Number < 100) returnNumber% 11 = 0;if(number% 10 = 0)Return false; String numbers = number +""; * Three-digit palindrome number for example: 121 131 151 and so on are the same before and after the same directly to determine whether the same before and after the same direct return * and then conform to the rule of the number into a key 5 in a map inside a list of the * when number is 5 for the time to determine Whether the last number of the first number is the same * the same is removed from the middle of the end to the comparison * Whether or not the set in key 5 in the map contains the remaining three digits, returns true instead of Flase * where it returns if True then put a K EY is a 7 list for recursive dictionary processing * The palindrome number of the odd digit 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. computeifabsent (5, K->NewArraylist<string> ());Palindromedata. Get (5). Add (numbers);Return true; }Else return False; }if(Number >= 1001 && number <= 9999) {if(number/1000 = = number% && number/100% = = number% 100/10) {Palindromedata. computeifabsent (6, K->NewArraylist<string> ());Palindromedata. Get (6). Add (numbers);Return true; }Return false; String firstnumber = numbers.substring (0, 1), Lastnumber = Numbers.substring (Numbers.length ()- 1, Numbers.length ());if(!firstnumber.equals (Lastnumber))Return false;intLength = Numbers.length (); String subString = numbers.substring (1, length-1);if(Integer.parseint (subString) = = 0)Return true; returnIsmapdata (numbers, length, number,substring); }Private BooleanBaseispalindromenumber (String numberfrist, String numberslast, String numbersLast2) { for(inti = 0; I < numberslast.length (); ) {intindex = Numberslast.length ()-i-1;if(i = = 0)
{/* To avoid a large data type traversal plus the first digit of the judgment if not the same direct return to reduce the number of times each need to be reversed data the length of the data as n reduces the number of n/2-1 times * * NumbersLast2 = numbersLast2 + numberslast.substring (index);if(!numberfrist.substring (0, 1). Equals (NumbersLast2))Return false; }Else{numbersLast2 = NumbersLast2 + numberslast.substring (index, index + 1);if(index = = 2 | | index = = 5 | | index = = 8) {if(!numberfrist.substring (0, Numberslast2.length ()). Equals (NumbersLast2))Return false;
}} ++i; } returnNumberfrist.equals (NUMBERSLAST2); }Private BooleanOlderispalindromenumber (Long number) {//Single-digit directly returns less than 100 palindrome number is divisible by 11 divisible by 10 is definitely not palindrome number//System.out.println (nu mber+ "num");if(Number < 10)Return true;if(Number < 100) returnNumber% 11 = 0;if(number% 10 = 0)Return false; String numbers = number +"";
SYSTEM.OUT.PRINTLN (numbers); /*system.out.println ("number = [" + numbers.length () + "]");intHalfindex = Numbers.length ()/2; String numberfrist = numbers.substring (0, halfIndex-1), Numberslast ="", NumbersLast2 =""; The last string interception needs to be noted is whether the string length is an evenif(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 BooleanIsmapdata (String numbers,intLengthLongNumber, String subString) {if(Palindromedata. Get (length)!=NULL) {//System.out.println ("Notnull Sub:" +numbers.substring (1,length-1));if(Palindromedata. get (length). Contains (subString)) {Palindromedata. computeifabsent (length + 2, K->NewArraylist<string> ());Palindromedata. Get (length + 2). Add (numbers);Return true; }Else{if(Subispalindromenumber (Numbers)) {Palindromedata. computeifabsent (length + 2, K->NewArraylist<string> ());Palindromedata. Get (length + 2). Add (numbers);Palindromedata. get (length). Add (subString);Return true; }Return false; }
}Else{if(Subispalindromenumber (Numbers)) {Palindromedata. computeifabsent (length + 2, K->NewArraylist<string> ());Palindromedata. Get (length + 2). Add (numbers);Return true; }Else return False; }
}Private BooleanSubispalindromenumber (String numbers) {intHalfindex = Numbers.length ()/2; String numberfrist = numbers.substring (0, halfIndex-1), Numberslast ="", NumbersLast2 =""; The last string interception needs to be noted is whether the string length is an evenif(Numbers.length ()/2 = 0)
{numberslast= numbers.substring (halfindex); }Else{numberslast = numbers.substring (Halfindex); } returnBaseispalindromenumber (Numberfrist, Numberslast, NumbersLast2); }
}