今天我们刷leetcode第二道整数反转
题目大意就是给定一个int整数如123 ,然后反转,以321数输出,我们直接贴代代码吧!
1.这是一种利用StringBuiler来做,这时应该扩展一下StringBuilder和StringBuffer区别
StringBuilder和StringBuffer一样都是操作可变的字符串,同时自带append()进行拼接,同时也会有reverse()方法进行反转字符串。
区别:StringBuffer加了同步锁synchronized,线程安全,而StringBuilder线程不安全
public static int reverse1(int x){
StringBuilder res = new StringBuilder();
String str = String.valueOf(x);
res.append(str);
String rev = res.reverse().toString();
return Integer.parseInt(rev);
}
2.利用数学来模拟栈
对于数学中int x如:123,进栈T可以用x = x *10 + T,弹栈可以用pop = x % 10 (pop为弹出来的元素)
剩下的元素 x = x/10 (弹栈后的数字)
考虑int范围。整体思路就是逐个将x弹出,弹出的严肃再压入rev中
public static int reverse2(int x){
int rev = 0;
while (x != 0) {
int pop = x % 10;//弹栈
x /= 10; //弹栈后元素
if (rev > Integer.MAX_VALUE/10 || (rev == Integer.MAX_VALUE / 10 && pop > 7)) return 0;
if (rev < Integer.MIN_VALUE/10 || (rev == Integer.MIN_VALUE / 10 && pop < -8)) return 0;
rev = rev * 10 + pop;//将弹栈后的元素*10压栈
}
return rev;
}
时间复杂度O(log(x))
网友评论