[アルゴリズム問題の解決策] LeetCode7。整数の反転

トピック

32ビットの符号付き整数を指定すると、各整数の桁を反転する必要があります。
私たちの環境が32ビットの符号付き整数しか格納できないと仮定すると、値の範囲は[-2 ^ 31、2 ^ 31 −1]です。この仮定によれば、整数が反転後にオーバーフローした場合、0を返します。

解決策1

番号を逆にするということは、その場所から新しい番号を再構築することを意味します。1の桁を取得するには、last = num%10を使用します。その後、num = num / 10が実行され、1桁が破棄されます。次に、num%10を使用して10桁を取得します。新しい数値の生成には、result = result * 10 + lastを使用できます。このようにして、毎回得られる1桁が結果の最後の桁に配置され、ループが進むにつれて徐々に前の桁になります。

考慮すべきもう1つの問題はオーバーフローです。intを直接反転すると、intより大きい数値を取得できます。したがって、long変数を使用して結果を格納できます。最終結果が得られたら、Intの範囲を超えているかどうかを判断します。

さらに、アルゴリズムは負の数にも当てはまるため、上記のソリューションでは負の数の問題を考慮する必要はありません。

コード1

class Solution {
    public int reverse(int x) {
        long result = 0;
        while(x != 0) {
            int last = x % 10;
            result = result * 10 + last;
            x = x / 10;
        }
        if(result < Integer.MIN_VALUE || result > Integer.MAX_VALUE) {
            result = 0;
        }
        return (int)result;
    }
}

知識のポイント

1. longとintの混合演算の結果はlongであり、long変数に直接割り当てることができます。
2. longとintは、サイズ
3で直接比較できます。アルゴリズムは負の数にも当てはまります。

おすすめ

転載: blog.csdn.net/vxzhg/article/details/106673473