modalsoul’s blog

これは“失敗”と呼べるかもしれないが、ぼくは“学習体験”と呼びたい

LeetCode 9. Palindrome Number

LeetCode problem No.9.

No.8 is here.

modalsoul.hatenablog.com

9. Palindrome Number

https://leetcode.com/problems/palindrome-number/

Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward.

Example 1

Input: 121
Output: true

Example 2

Input: -121
Output: false

Example 3

Input: 10
Output: false

Code

object Solution {
    def isPalindrome(x: Int): Boolean = {
        val str = x.toString
        str == str.reverse
    }
}

Methods

  • Convert integer to string.
  • Make reversed string.
  • Compare string and reversed string.

Result

Runtime: 512 ms, faster than 6.09% of Scala online submissions for Palindrome Number. Memory Usage: 55 MB, less than 100.00% of Scala online submissions for Palindrome Number.

Follow up

Coud you solve it without converting the integer to a string?

Code

object Solution {
    def isPalindrome(x: Int): Boolean = {
        if(x < 0 || (x%10 == 0 && x != 0)) false
        else {
          var num = x
          var reversed = 0
          while(num > reversed) {
            reversed = reversed*10 + num%10
            num = num/10
          }
          num == reversed || num == reversed/10
        }
    }
}

Methods

  • Initial num is x.
  • Initial reversed num is 0.
  • Calculate reversed num while reversed num is smaller than num.
    • Multiply reversed num by 10 and add remainder of num.
    • Divide num by 10.
  • If num is equal to reversed num, true.
  • if num is equal to reversed num divided by 10, true.

Result

Runtime: 904 ms, faster than 6.09% of Scala online submissions for Palindrome Number. Memory Usage: 54.6 MB, less than 100.00% of Scala online submissions for Palindrome Number.