0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【LeetCode #9】Palindrome Numberの所見ログ

Posted at

【LeetCode #9】Palindrome Numberの所見ログ

はじめに

一週間ぶりです。
今回はLeetCode#9のPalindrome Numberに取り組んだので、そのレポを残します。

どうでもいいけど、"Palindrome"ってなじみがなさ過ぎてスペル間違えそうになるね。

ではいきましょう。

問題概要

LeetCode 9: Palindrome Number

問題:
整数 x が与えられる。これが回文数(前から読んでも後ろから読んでも同じ)であるかを判定せよ。

例:

  • 121 → True(121 == 121)

  • 121 → False(負数は回文じゃない。"-121" != "121-")

  • 10 → False(10 != 01)

初見の思考

問題を見て最初に思ったこと:

  • 相変わらずなんもわからん。
  • 配列に数字を一個ずつ取り出して、どっかで比較するのかな。
  • (GPTからのヒント開示時)桁数が奇数なら中央、偶数なら折り返しで比較かな?
  • 新しい変数に元の数の%10で求めた値を格納していく?
  • 条件でふるいにかけたのをループして、任意の桁数まで終わらせて比較処理をする?
  • 例外処理として、負数と一桁目が0の時(0単体は除く)はとりあえず弾いて良い。

自分で書いたコード(初版):

int reversed = 0;

if (x > 0 || (x % 10 == 0 && x != 0)) {
    while (x < reversed) {
        int n = x % 10;
        x / 10;
        reversed = reversed * 10 + n;
    }
}

とりあえずGPTのヒントをもとに頑張って書いた、みたいな感じだね。
これの問題点は、最初の思考で、弾く時の条件がループに突入するための条件になってしまっていること。
あとはループの制御式も逆だね。 x > reversedにしないと、一生ループに入らないよ

当時の僕。大丈夫そ?
あと見落としてたけど、xを10で割って、その変数どこにも入ってない

アホかお前

x = x / 10;にしないとね。
あとはreturnが欲しいね。

## 正しくはこう。(GPT先生)

public boolean isPalindrome(int x) {
    // 例外処理:負数 or 末尾が0(ただし0はOK)
    if (x < 0 || (x % 10 == 0 && x != 0)) {
        return false;
    }

    int reversed = 0;
    while (x > reversed) {
        int n = x % 10;
        x /= 10;
        reversed = reversed * 10 + n;
    }

    // 偶数桁なら x == reversed、奇数桁なら x == reversed / 10
    return x == reversed || x == reversed / 10;
}

安定の綺麗さ。

例外処理を先にやって、returnに式を使うのが無駄がなくていい感じ。
これを自分で作れるようになりたいね。

学び

  • 例外処理は先にやる。
  • 回文の判定は折り返しまでやれば十分。
  • ↑の条件はx <= reversedになった時。
  • booleanで条件式を使うと綺麗に戻り値を返す。

おわりに

今回の問題は大部分をGPTに助けてもらった感じでした。

とはいえ、着々と前進してきているような気もする。

この調子で引き続き、Leetcodeに取り組んでいきます。

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?