7.リバース整数
件名の説明:
32ビット符号付き整数、整数の逆の数字を与えられました。
例1:
入力:123
出力:321
例2:
入力:-123
出力:-321
例3:
入力:120
出力:21
注:
[ - 1 -231、231]:我々は、32ビット符号付き整数の範囲内の整数を格納することができる環境を扱っていると仮定する。この問題のために、逆整数オーバフローしたとき、あなたの関数が0を返すことを想定しています。
問題へのソリューション:
class Solution {
public int reverse(int x) {
int reversed = 0;
int pop = 0;
while(x!=0)
{
pop = x%10;
x = x/10;
if(reversed>Integer.MAX_VALUE/10 || (reversed==Integer.MAX_VALUE/10 && pop>7)){
return 0;
}
if(reversed<Integer.MIN_VALUE/10 || (reversed==Integer.MIN_VALUE/10 && pop<-8)){
return 0;
}
reversed = reversed*10+pop;
}
return reversed;
}
}
この問題では、主な問題は、オーバーフロー及びフリップを防止するために、限られた整数値です。
- 有限の整数反転、方法が今回の問題で使用されているため、10に記載の方法で割った余りを取ります
- スタックオーバーフローのために
式によると:
の使用:
(逆転> Integer.MAX_VALUEの||(逆転== Integer.MAX_VALUEの&& POP> 7)であれば
もし(逆転<はInteger.MIN_VALUE ||(逆転==はInteger.MIN_VALUE &&ポップ<-8))
2へのソリューション:
もちろん、モデル溶液が(INT)再変換、複合式は省略する決定され、長尺のアレイを使用することである。int型の式に従って決定されない場合、それはオーバーフローする、ため、欠点は、テストデータによるものですそれができるので、長いモデルの長さを超えてはなりません。
public int reverse(int x) {
long res = 0;
while (x != 0) {
res = res * 10 + x % 10;
x = x / 10;
}
if (res < Integer.MIN_VALUE || res > Integer.MAX_VALUE) {
return 0;
} else {
return (int)res;
}
}