割り算と余りで整数が回文かを確かめる

整数を​前から​読んでも​後ろから​読んでも​同じ​数かを​判定します。​文字列に​直さず、​10 で​割った​余りで​下の​桁から​取り出し、​後ろ半分だけを​逆に​組み立てて​比べる​練習です。

海外で定番の問題リスト 4 本のうち 1 本に入っています (LeetCode Top Interview 150)

問題

整数 x を受け取ります。x を 10 進数で書いたとき、前から読んでも後ろから読んでも同じ並びになるなら真、ならないなら偽を返す関数を書いてください。

  • 負の数は回文ではないものとします。-121 を後ろから読むと 121- になり、同じ並びにならないからです
  • 0 から 9 までの 1 桁の数は、どれも回文です
  • x は -2147483648 以上 2147483647 以下です
  • 数を文字列に直さず、数のままの計算だけで判定してください

入力と出力の例

例 1

桁の数が偶数でも回文になります。

入力

x = 2552

出力

true

例 2

入力

x = 1534

出力

false

例 3

負の数は、数字の並びが左右で同じに見えても回文ではありません。

入力

x = -404

出力

false

面接での聞かれ方

面接では、最初は短く聞かれ、条件があとから足されることが多いです。

  • 「整数が回文かどうかを判定してください」
  • 文字列に直して逆にした書き方を見せると、「では、文字列に直さずに解けますか?」と続きます
  • 「負の数や、末尾が 0 の数はどうなりますか?」と、端の場合を聞かれます

文字列に直す書き方も正しく動きます。ただ、ここで見られているのは、10 で割った余りと商で桁を扱えるかどうかです。

アルゴリズムのチートシートの「配列と文字列」に、​この​型の​要点を​表と​コードで​まとめています。

main.py
def is_palindrome_number(x):
    # ここに書きます
    pass


# 「実行」を押すと、この行の結果が出ます
print(is_palindrome_number(2552))

できているか「例で確かめる」を押すと、問題の例を全部この関数に渡して、通ったかをここに出します