森田賢二のleetCodeの使い方、解説、解答を毎日更新しているキャラクター

[leetcode]問題解答と解説。7. Reverse Integer [JavaScript]

[leetcode]問題解答と解説。7. Reverse Integer [JavaScript]

皆さんleetCode好きですよね。私も好きです。
なかなかやる機会がないのですよね。
leetCodeの使い方や解説ではなく実際に問題を解決するために何をしたか
をメモ書きして行きます

私はある決意をして今挑んでいます。
モチベーションを保つためだけにこれをやっています。

では今日のleetCode。
【[leetcode]7. Reverse Integer】の解決策と方法。自分がまず挑戦して
やったことをさらけ出します。

※下にある自分のコードは自分で設けた制限時間内に書けたところまです。

これは
「私は年末までこれを続けたらどんなleetCoderになるか」のシリーズ。
実験的ブログ更新です。

森田賢二のleetCode
森田賢二のleetCode

[leetcode]7. Reverse Integer ルール

Given a signed 32-bit integer x, return x with its digits reversed. If reversing x causes the value to go outside the signed 32-bit integer range [-231, 231 - 1], then return 0.

Assume the environment does not allow you to store 64-bit integers (signed or unsigned).

Example 1:

Input: x = 123
Output: 321

Example 2:

Input: x = -123
Output: -321

Example 3:

Input: x = 120
Output: 21

ざっくり和訳

符号付き32ビット整数xが与えられたとき、その桁を逆にしたxを返す。xを反転させると符号付き32ビット整数の範囲[-231, 231 - 1]から外れてしまう場合は0を返します。

exampleは[実際の問題ページ]()を見てください

[leetcode]7. Reverse Integer 問題ページ

7. Reverse Integer

[leetcode]7. Reverse Integer

my code is not good(compile error)

function reverse(x: number): number {
    let dep = 0
    let n = []
    let isNegative = x < 0
    x = Math.abs(x)
    while(x !== 0){
        const d = Math.floor(x / 10)
        const t = Math.floor(x % 10)
        n.push(t)
        x = d
        dep++
    }
    let r = 0
    for (let index = 0; index < n.length; index++) {
        r += n[index] * (10**dep) / 10
        dep--
    }
    if(isNegative){
        return - + r
    }
    return r
};

時間切れ。

32-bit integer range [-231, 231 - 1], then return 0.

これができなかった

    const max = 2**31
    if(r > max){
        return 0
    }

参考
これを参考にして最後にこれを追加して完成した

[leetcode]7. Reverse Integer。discussの中の一つの解答例

数ある中からJavaScriptのもので、理解しやすい解説をピックアップしました。
discussから見ればさらにもっと違う方法で真似したくなるものがあるかもしれないですね

JavaScriptでfilterされている、discussはこちらから

これが違う実装

[leetcode7. Reverse Integer]

1

var reverse = function(x) {
    const reversed =  parseInt(Math.abs(x).toString().split('').reverse().join('')) * Math.sign(x);
    return (reversed <= 0x7fffffff && reversed >= -0x80000000) ? reversed : 0;
};

0x7fffffff-0x80000000 ...

[leetcode]7. Reverse Integerをやってみて感想

  • 数字の一の位を切り取って何かするケースはここの問題で多い

カテゴリー leetCode