python手刃でLeetcode(9):回文数【簡単問題】

2071 ワード

前言
ブログには「pythonの手でLeetcodeを刃にする」というテーマが新設され、その名の通り、主な目的は自分がLeetcodeで問題をブラシする過程を記録することであり、コードの全過程はpython 3で作成され、使用したウェブサイトは:leetcode中国である.このウェブサイトの利点は:1)純粋な中国語で、英語が読みにくい問題を解決した.2)Webページの開封速度が速い.`また、現在公式サイトで提供されている解題コードはjavaで作成されており、公式のpython解答は提供されていません.このコラムでは、できるだけ多くの解法を使って各問題のpython 3解答コードを与えるほか、自分が問題を作る過程で得た収穫や思考を記録しています.後で復習して調べるのに便利です.
タイトル
整数が文数であるかどうかを判断します.回文数とは、正の順序(左から右へ)と逆の順序(右から左へ)が同じ整数です.
  • 例1:入力:121出力:true
  • 例2:入力:-121出力:false解釈:左から右へ、-121です.右から左に読むと121-.したがって、回文数ではありません.
  • 例3:入力:10出力:false解釈:右から左へ01.したがって、回文数ではありません.

  • 方法1:
    頭に浮かぶ最初のアイデアは、もちろん数字を文字列に変換し、文字列が返信文であるかどうかをチェックすることです.
    class Solution:
        def isPalindrome(self, x):
    	    a = str(x)
            n = len(a)#    
            i = 0
            while i

    ここでは1回のループを用いて,他の考え方がない場合に解決策として失われない.しかし,この方法は時間の複雑さが長すぎて,ここでは通過できない.
    方法2:
    2つ目の方法はもちろんpythonのスライス大法を使います.ここでは2つの考え方を詳しく分けました.1つ目の考え方は、あなたの数字がいくらであるかにかかわらず、pythonの手刃Leetcode(7):反転整数【簡単な問題】で述べた文字列反転スライス大法を直接利用することです.後で比較すればいいです.
    class Solution:
        def isPalindrome(self, x):
            x = str(x)
            return x == x[::-1]
    

    Amazing!2行のコードで解決します.
    もう一つの考え方は、入力された数字のタイプをよく考えてみると、負数は必ず返信数ではなく、Falseに直接戻ればよいので、入力データをソースから制御し、無駄な変換文字列、反転操作を防止することです.
    class Solution:
        def isPalindrome(self, x):
            if x < 0:
                return False        
            return int(str(x)[::-1]) == x
    

    コードは数行増えたが、速度は下がった.
    方法3:半分の数字だけを反転
    このコードの考え方は,回文数字に対して,その後の半分が反転した後,元の数字の前半と同じであるべきであるからである.だから数字の後半を切り取って反転し、前半と比較すればいいだけです.考え方は面白いですが、ここでは、上記の2つの方法に比べてコード長も時間複雑度も長くなり、唯一の利点は一部のスペースを節約して、一応ここに貼ることです.
            x1 = str(x)  # x      
            n = len(x1)  #     
            if n == 1:   #        ,    True
                return True  
            else:
                x2 = x1[n-n//2:] #     
                if x1[:n//2] == x2[::-1]: #                  
                    return True
                else:
                    return False
    

    最後に、やんちゃな公式サイトは小さな進級問題を与えて、後で解決します:
    進級:整数を文字列に変換しないでこの問題を解決できますか?