leetcode 9. Palindrome Number解法python


一.問題の説明
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
Explanation: From left to right, it reads -121. From right to left, it becomes 121-. Therefore it is not a palindrome.

Example 3:
Input: 10
Output: false
Explanation: Reads 01 from right to left. Therefore it is not a palindrome.

Follow up:
Coud you solve it without converting the integer to a string?
二.問題を解く構想.
まず負数は必ず回文数ではありませんが、0`9というビットは回文数で、他の場合は文字列にして先頭と末尾が等しいかどうかを判断すればいいのです
問題は最後に文字列に変換しない方法で解決できるかどうかについて述べた.
mod 10ごとに余剰数を求めると位置ごとの数が得られ、数字が反転します
次に等しいか否かを判定し、等しいか否かが回文数であり、等しくなく、反転後の数が処理すべき数よりも小さい場合は反復を継続する
要は、回文数が偶数桁、奇数桁の場合がありますのでご注意ください
したがって,等しいか否かを判断する際にはxとx/10を同時に判断しなければならない.
このxと反転デジタル更新が同期していないと問題が発生します
10,20,30のように...90のような2桁10の倍数は、1回を除いて反転数字が0であり、更新後数字が9であり、x/10が余数に等しいか否かを判断する場合、x/10も0であり、解決策は事前に判断することであり、10を割り切ることができる数はすべて回文数ではなく、0を除いて、10を割り切ることができるので必ず0で終わるが、0は数字の先頭にはならない
2つの実装方法を添付
もっとleetcodeアルゴリズムの問題解法私のコラムleetcodeアルゴリズムに注目してくださいゼロから終わりまで私に注目してください
みんながいっしょに道を歩いていっしょにacをこすることを歓迎します
三.ソースコード
class Solution:
    def isPalindrome(self, x: int) -> bool:
        if x<0:return False
        str_x=str(x)
        if len(str_x)==1:return True
        for t in range(int(len(str_x)/2)):
            if str_x[t]!=str_x[-1-t]:
                return False
        return True
class Solution:
    def isPalindrome(self, x: int) -> bool:
        if x<0 or (x%10==0 and x!=0):return False
        if x/10<1:return True
        reverse_num=0
        while reverse_num