説明タイトル:整数パリンドロームであるかどうかを決定します。(左から右へ)と読み出し(左右に)反転パリンドローム正しい順序が同じ整数です。
入力:121出力:真の入力:出力偽-121
:アイデア問題解決明らかに、この問題に類似反転文字列を前に(それについての質問を磨くために有用であることを示し、すべての後、)ง•_•(のアイデアをง) 。
思考:暴力は、文字列を変換します
クラスソリューション: デフ isPalindrome(自己、X:整数) - > BOOL: もし(X < 0): リターン偽 他: str_x = STR(x)は、 私は = 0 、J = LEN(str_x)-1 しばらく(I < J) : もし(str_x [I] == str_x [J]): I + = 1 J - = 1 他: リターン偽 リターン 真
首長の文言に言及した後、彼らは自分のコードがあまりにも複雑で、そして彼の党が得る見つけます。(<︿>練習に進みます)
クラスソリューション: デフ isPalindrome(自己、X:整数) - > BOOL: リターン・ STR(x)は[:: - 1] == STR(x)は、
2考える:逆テキストに、スタックのアイデアを使用して。
2つのアイデアの改善:前半とパリンドローム逆数の後半は同じでなければならないように、これだけ半サイクル時に読み取ることができます。
そのサイクルはそれの半分を決定するためにどのようになっていますか?元の数は、プロセスが半桁を有し、* 10元のデジタル/ 10以下であれば数より反転後、10後数を乗じ10で除し、次に反転されます。
クラスソリューション: デフ isPalindrome(自己、X:整数) - > BOOL: もし(X <0 または(X%10 == 0 と!X = 0)): リターン偽 REV = 0 しばらく(X> REV): REV = REV * 10 + X%10 、X = X // 10 であれば(X == REV または X == REV // 10 ): リターントゥルー 他: リターン偽