Kotlin algorithm for the introduction of the palindrome number algorithm optimization one __ algorithm

Source: Internet
Author: User
Tags pow
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)}}

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.