您的位置:首页 > 编程语言 > Java开发

LeetCode-探索-初级-字符串-整数反转-java

2019-01-02 10:14 501 查看

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

示例 1:

[code]输入: 123
输出: 321

 示例 2:

[code]输入: -123
输出: -321

示例 3:

[code]输入: 120
输出: 21

注意:

假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231,  231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

方法很多,第一种方法:

只要是涉及反转的,首先想到数组中的反转方法:

1 将int转化为String,进而转化为char[]

2 在char[]中完成反转

3 判断是否溢出

[code]public int reverse(int x) {
int signal = 1;
if (x < 0)
signal = -1;
String target = signal * x + "";    //omit the signal
char[] chars = target.toCharArray();
char temp = 0;
int symmetryI = 0;
for (int i = 0 ; i < target.length() >> 1 ; i ++) {
symmetryI = target.length() - 1 - i;
temp = chars[i];
chars[i] = chars[symmetryI];
chars[symmetryI] = temp;
}
int result = 0;
try {
result = signal * Integer.parseInt(new String(chars));
} catch (NumberFormatException e) {
result = 0;
}
return result;
}

第二种方法:

凡是涉及到反转的,很难让人不想到栈这个数据结构,是的,我们可以通过栈来进行反转:

[code]public int reverse1(int x) {
java.util.Stack stack = new java.util.Stack();
int signal = 1;
if (x < 0)
signal = -1;
String target = signal * x + "";
char[] chars = target.toCharArray();
for (int i = 0 ; i < chars.length ; i ++)
stack.push(chars[i]);
for (int i = 0 ; i < chars.length ; i ++)
chars[i] = (char)stack.pop();
int result = 0;
try {
result = Integer.parseInt(new String(chars));
} catch (NumberFormatException e) {
result = 0;
}
return signal * result;
}

第三种方法:

因为是整数类型的,(或者说是数值类型的更加合适),我们可以利用数学的方法进行一个数字的倒置。

值得一提的是数字反转需要考虑到溢出问题:

[code]public int reverse0(int x) {
int result = 0;
while (x != 0) {
int digit = x % 10;  //get the last digit of x.
if (result > Integer.MAX_VALUE / 10 || (result == Integer.MIN_VALUE / 10 && digit > 7) ||
result < Integer.MIN_VALUE / 10 || (result == Integer.MIN_VALUE / 10 && digit < -8))
return 0;
result = result * 10 + digit;
x = x / 10;    //make the digit before the last become the last one.
}
return result;
}

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: