Leetcode-7-反転整数
2149 ワード
32ビットの符号付き整数を指定し、整数の数値を反転します.
例1:
例2:
例3:
注意:我々の環境では32ビットの符号付き整数しか記憶できないと仮定し,その数値範囲は[−2の31次,2の31次−1]である.この仮定によれば,反転後の整数がオーバーフローすると0を返す.
分析:
タイトルの意味は简単で、数字のビットを反転しますが、与えられたデータ型はint型で、値の范囲があることに注意して、javaの中でInteger.MAX_を使うことができますVALUEとInteger.MIN_VALUEで表します.一方、反転後の値がIntegerの値範囲を超えるとオーバーフローし、オーバーフロー後にオーバーフローしたことがわかりませんので、より大きな値範囲を表すデータ構造でデータを格納し、longタイプで結果を格納し、Integerの値範囲を超えたか否かを判断する必要があります.最後にintタイプのデータに変換して返します.
解法1:
この方法では、数値を文字列に変換し、文字列を前後に反転することを考慮します.具体的には、次のようになります.
解法2:
この方法では,数字を文字に変換することなく,より簡潔な方法を用いて,10の型取り方法を用いて伝達パラメータの各具体的な数字を取り出した.具体的なコードは以下の通りです.
例1:
: 123
: 321
例2:
: -123
: -321
例3:
: 120
: 21
注意:我々の環境では32ビットの符号付き整数しか記憶できないと仮定し,その数値範囲は[−2の31次,2の31次−1]である.この仮定によれば,反転後の整数がオーバーフローすると0を返す.
分析:
タイトルの意味は简単で、数字のビットを反転しますが、与えられたデータ型はint型で、値の范囲があることに注意して、javaの中でInteger.MAX_を使うことができますVALUEとInteger.MIN_VALUEで表します.一方、反転後の値がIntegerの値範囲を超えるとオーバーフローし、オーバーフロー後にオーバーフローしたことがわかりませんので、より大きな値範囲を表すデータ構造でデータを格納し、longタイプで結果を格納し、Integerの値範囲を超えたか否かを判断する必要があります.最後にintタイプのデータに変換して返します.
解法1:
この方法では、数値を文字列に変換し、文字列を前後に反転することを考慮します.具体的には、次のようになります.
public int reverse(int x) {
boolean negative = x < 0;
char[] chars = String.valueOf(x).toCharArray();
int length = chars.length;
for (int i = 0; i < length / 2; i++) {
chars[i] ^= chars[length - 1 - i];
chars[length - 1 - i] ^= chars[i];
chars[i] ^= chars[length - 1 - i];
}
int pow = 0;
long result = 0;
for (int i = length - 1; i >= 0; i--) {
if ("-".equals(String.valueOf(chars[i]))) {
continue;
}
result += Long.parseLong(String.valueOf(chars[i])) * (long) Math.pow(10, pow);
pow += 1;
}
if (negative) {
result *= -1;
}
if (result > Integer.MAX_VALUE || result < Integer.MIN_VALUE) {
return 0;
}
return (int) result;
}
解法2:
この方法では,数字を文字に変換することなく,より簡潔な方法を用いて,10の型取り方法を用いて伝達パラメータの各具体的な数字を取り出した.具体的なコードは以下の通りです.
public static int reverse(int x) {
boolean negative = x < 0;
if (negative) {
x *= -1;
}
long result = 0;
while (x > 0) {
result = result * 10 + x % 10;
x /= 10;
}
if (negative) {
result *= -1;
}
if (result > Integer.MAX_VALUE || result < Integer.MIN_VALUE) {
return 0;
}
return (int) result;
}