BETA

7. Reverse Integer (Easy)

投稿日:2019-04-06
最終更新:2020-03-27

https://leetcode.com/problems/reverse-integer/

与えられた数値をひっくり返せという問題。

# @param {Integer} x  
# @return {Integer}  
def reverse(x)  
    s = x.to_s  
    res = ''  
    start = 0  
    if s.start_with?('-')  
        res = '-'  
        start = 1  
    end  
    num = s[start..-1]  
    res += num.reverse  
    r = res.to_i  
    if r.bit_length < 32  
        r  
    else  
        0  
    end  
end  

邪道だけど数値を一旦文字列にして reverse した。
回答は 32bit signed int をオーバーフローしたときは 0 を返せとのことだが、
Ruby は 32bit を超えてもオーバーフローせずに扱えてしまうので、 bit_length を使って自分で判断する必要がある。

2020/03/27 追記

久々に再開するかと思って過去記事を見たら、まともな解法が載ってなくて恥ずかしいので書く。

# @param {Integer} x  
# @return {Integer}  
def reverse(x)  
    tmp = x > 0 ? x : -x  
    result = 0  
    while tmp > 0  
        result = result * 10 + (tmp % 10)  
        tmp /= 10  
    end  

    result = x > 0 ? result : -result  
    return result.bit_length < 32 ? result : 0  
end  

10で割った余りを10倍ずつして足し上げるだけ。マイナスのときは一度プラスにしてから計算する。

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

https://leetcode.com/ の Problems の解法を載せています。ネタバレ注意。

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう