トピック
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で直接比較できます。アルゴリズムは負の数にも当てはまります。