LeetCode in Kotlin

906. Super Palindromes

Hard

Let’s say a positive integer is a super-palindrome if it is a palindrome, and it is also the square of a palindrome.

Given two positive integers left and right represented as strings, return the number of super-palindromes integers in the inclusive range [left, right].

Example 1:

Input: left = “4”, right = “1000”

Output: 4

Explanation:: 4, 9, 121, and 484 are superpalindromes. Note that 676 is not a superpalindrome: 26 * 26 = 676, but 26 is not a palindrome.

Example 2:

Input: left = “1”, right = “2”

Output: 1

Constraints:

Solution

@Suppress("NAME_SHADOWING")
class Solution {
    fun superpalindromesInRange(left: String, right: String): Int {
        val l = left.toLong()
        val r = right.toLong()
        var cnt = 0
        var cur: Long = 1
        while (true) {
            val p1 = getPalindromeIncLastDigit(cur)
            val p2 = getPalindromeExcLastDigit(cur)
            val sq1 = p1 * p1
            val sq2 = p2 * p2
            if (sq2 > r) {
                break
            }
            if (sq1 in l..r && isPalindrome(sq1)) {
                cnt++
            }
            if (sq2 >= l && isPalindrome(sq2)) {
                cnt++
            }
            cur++
        }
        return cnt
    }

    private fun isPalindrome(`val`: Long): Boolean {
        var `val` = `val`
        var construct: Long = 0
        if (`val` % 10 == 0L && `val` >= 10) {
            return false
        }
        while (construct < `val`) {
            construct = construct * 10 + `val` % 10
            `val` /= 10
        }
        return construct == `val` || construct / 10 == `val`
    }

    private fun getPalindromeIncLastDigit(`val`: Long): Long {
        var `val` = `val`
        var copy = `val`
        while (copy != 0L) {
            `val` = `val` * 10 + copy % 10
            copy /= 10
        }
        return `val`
    }

    private fun getPalindromeExcLastDigit(`val`: Long): Long {
        var `val` = `val`
        var copy = `val` / 10
        while (copy != 0L) {
            `val` = `val` * 10 + copy % 10
            copy /= 10
        }
        return `val`
    }
}
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy