【競技プログラミング】「Palindrome Number」with Python | LeetCode #9

Python

こちらは「Palindrome Number」のPythonによる解答例となっております。この問題は、与えられた整数が回文数であるかどうかを判定する問題です。

問題

整数が与えられたとき、その整数が回文数であるかどうかを判定します。

  • 負の整数は回文数ではありません。
  • 12321のような数字は回文数です。

解法

この問題は、整数を文字列に変換し、文字列を反転させて元の文字列と比較する方法で解くことができます。また、整数を反転させる方法もあります。

アルゴリズムの概要を以下に述べます。

  1. 整数が負の場合、回文数ではないためFalseを返す。
  2. 整数を文字列に変換する。
  3. 文字列を反転させる。
  4. 反転させた文字列と元の文字列を比較する。
  5. 比較結果がTrueの場合、回文数であるためTrueを返す。
  6. 比較結果がFalseの場合、回文数ではないためFalseを返す。

Pythonコード

以下のコードが、「Palindrome Number」を解くためのPythonプログラムとなります。

### Function ##################################################################

def solve(num=0):
    
    solver  = Solution().isPalindrome
    
    if 1 <= num <= Input().input: id_LIST = [num]
    else: id_LIST = [id+1 for id in range(Input().input)]
    
    for id in id_LIST:
        data    = Input(id)
        ans     = solver(data.x)
        result  = "OK" if ans==data.ans else "NG"
        print(f"[{str(id).zfill(3)}] {result}")

### Class #####################################################################

class Solution(object):
    
    def isPalindrome(self, x):
        """
        :type x: int
            -2**31 <= x <= 2**31 - 1
        :rtype: bool
        """
        
        ### Condition: False
        if x < 0: return False
        
        ### Process: Palindrome
        """
        p, res = x, 0
        while p:
            res = res * 10 + p % 10
            p //= 10
        """
        
        res = int(str(x)[::-1])
        
        return res == x

#==============================================================================

class Input:
    
    def __init__(self, num=0):
        
        if num == 1:
            self.x = 121
            self.ans = True
        
        elif num == 2:
            self.x = -121
            self.ans = False

        elif num == 3:
            self.x = 10
            self.ans = False
        
        else:
            self.input  = 3

### Main ######################################################################

if __name__ == "__main__":

    solve()

###############################################################################