LeetCode 7題デジタル反転
LeetCode 7題デジタル反転
32ビットのシンボル付き整数を与えます.この整数の各ビットの数字を反転する必要があります.
例1:
入力:123出力:321例2:
入力:-123出力:-321例3:
入力:120出力:21注意:
我々の環境では32ビット以下の符号付き整数しか記憶できないと仮定すると,その数値範囲は[−231,231−1]である.この仮定に基づいて、反転後に整数がオーバーフローした場合は0を返します.
じょうきかいほう
かいてんもじれつかいほう
文字列を回す方法は、一歩一歩ゆっくり回ることです
1.Stringを定義し、intをStringに変換する
2.StringBuilderクラスを定義して文字列Stringの反転を行う
3.StringメソッドでStringBuiderをStringに変換する
4.StringをIntegerクラスに変換する
5.最後にIntegerをint型に変換し、変換時にオーバーフローがある場合はtry…catchを直接行う
この方法は従来の方法より直接的で,オーバーフロー時の問題を考える必要はない.
大物解法
オーバーフローを判断する方法は分かりやすく、コードは簡潔です
(cur*10)/10!=Curは、cur*10がint型の最大値より大きいと自動的に縮小され、その余剰は必然的に以前の数と等しくない
32ビットのシンボル付き整数を与えます.この整数の各ビットの数字を反転する必要があります.
例1:
入力:123出力:321例2:
入力:-123出力:-321例3:
入力:120出力:21注意:
我々の環境では32ビット以下の符号付き整数しか記憶できないと仮定すると,その数値範囲は[−231,231−1]である.この仮定に基づいて、反転後に整数がオーバーフローした場合は0を返します.
じょうきかいほう
package com.lsy.DateStructure.solution;
public class Leet7 {
public int reverse(int x) {
int cur = 0;//
while (x != 0) {
int pop = x % 10;// x
x = x / 10;
/*
cur
1.cur > Integer.MAX_VALUE / 10 || (cur < Integer.MIN_VALUE / 10)
cur 10 cur 10
, cur = cur * 10 + pop;cur
2.(cur == Integer.MAX_VALUE / 10 && pop > 7) || (cur == Integer.MIN_VALUE / 10 && pop < -8)
int int 1 2,
*/
if (cur > Integer.MAX_VALUE / 10 || (cur < Integer.MIN_VALUE / 10)) {
return 0;
} else if ((cur == Integer.MAX_VALUE / 10 && pop > 7) || (cur == Integer.MIN_VALUE / 10 && pop < -8)) {
return 0;
}
cur = cur * 10 + pop;
}
return cur;
}
かいてんもじれつかいほう
文字列を回す方法は、一歩一歩ゆっくり回ることです
1.Stringを定義し、intをStringに変換する
2.StringBuilderクラスを定義して文字列Stringの反転を行う
3.StringメソッドでStringBuiderをStringに変換する
4.StringをIntegerクラスに変換する
5.最後にIntegerをint型に変換し、変換時にオーバーフローがある場合はtry…catchを直接行う
この方法は従来の方法より直接的で,オーバーフロー時の問題を考える必要はない.
if (x>=0) {
String string = String.valueOf(x);
StringBuilder stringBuilder = new StringBuilder(string).reverse();
String string1 = stringBuilder.toString();
try {
Integer integer = new Integer(string1);
return integer.intValue();
} catch (Exception e) {
return 0;
}
}
else {
x=Math.abs(x);
String string = String.valueOf(x);
StringBuilder stringBuilder = new StringBuilder(string).reverse();
String string1 = stringBuilder.toString();
try {
Integer integer = new Integer(string1);
return -integer.intValue();
} catch (Exception e) {
return 0;
}
}
大物解法
オーバーフローを判断する方法は分かりやすく、コードは簡潔です
(cur*10)/10!=Curは、cur*10がint型の最大値より大きいと自動的に縮小され、その余剰は必然的に以前の数と等しくない
int pop;
int cur = 0;
while(x!=0){
pop=x%10;
x=x/10;
if((cur*10)/10!=cur){
return 0;
}
cur = cur *10+pop;
}
return cur;