版权声明:转载请注明出处@Author anlijie https://blog.csdn.net/m0_38101105/article/details/82291410
给定一个 32 位有符号整数,将整数中的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0。
int ret = 0;
for (; x != 0; x /= 10) {
if (ret != 0 && Integer.MAX_VALUE / ret < 10 && Integer.MAX_VALUE / ret > -10) {
return 0;
}
ret = ret * 10 + x % 10;
}
return ret;
这个是我抄的答案,这个算法我是想不到,我的两个版本的答案全死在大数上
为了纪念我的代码我把它们贴出来共勉
if (x == 0) {
return 0;
}
String stringX = String.valueOf(x);
String stringBuilder = "";
int size = stringX.length();
int sign = -1;
if (stringX.charAt(0) == '-') {
size -= 1;
stringBuilder += "-";
sign = 0;
}
boolean bool = false;
int signAnother = 0;
for (int i = stringX.length()-1; i > sign; i--) {
bool = (stringX.charAt(i)-'0') != 0;
if (bool || signAnother == 1) {
signAnother = 1;
stringBuilder += stringX.charAt(i);
}
}
BigInteger maxInt = new BigInteger(stringBuilder);
Integer integer = maxInt.intValue();
return integer;
String str = String.valueOf(x);
Stack<Object> s1 = new Stack<>();
for (int i = 0; i <str.length() ; i++) {
s1.push(Integer.valueOf(str.charAt(i) - '0'));
}
for (int i = 1; i <str.length() ; i++) {
if (s1.search(0) == 1) {
s1.pop();
}else {
break;
}
}
boolean a = false;
if (str.charAt(0) == '-') {
a = true;
}
Stack<Object> stack = new Stack<>();
if (a) {
stack.push("-");
for (int i = s1.size()-1; i >-1 ; i--) {
stack.push(s1.get(i));
}
stack.pop();
}
System.out.println(stack);
String s = "";
for (int i = 0; i <stack.size() ; i++) {
s += String.valueOf(stack.get(i));
}
System.out.println(s);
int b = Integer.valueOf(s);
return b;