2019年4月29日
目录
题目:整数反转

解答
解法一:暴力拆解数字
public class IntegerInversion {
public static int reverse(int x) {
// 1.标识ture为正,false为false
boolean symbol = true;
if (x < 0){
x = 0-x;
symbol = false;
}
// 2.列表
ArrayList<Integer> nums = new ArrayList<>();
while (x>0){
int a = x % 10; //取出最低位
if (a >= 0){
nums.add(0,a);//最低位靠前
}
x = x/10;
}
System.out.println("nums="+nums);
// 3.逆转数字
Double result = 0.0;
for (int i=0; i <= nums.size()-1 ;i++){
result += nums.get(i) * Math.pow(10,i);
System.out.println("result="+result+" i="+i );
}
// 4.正数转负数
if (!symbol){
result = 0 - result;
}
// 5.溢出
if (result < Integer.MIN_VALUE || result > Integer.MAX_VALUE){
return 0;
}
return result.intValue();
}
public static void main(String[] args){
int val = -901000;
int reverse = reverse(val);
System.out.println("val="+val+" result="+reverse);
}
}
性能结果:

解法二:优化解法
class Solution {
public int reverse(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;
}
return rev;
}
}
分析:
- 时间复杂度:O(\log(x))O(log(x)),xx 中大约有 \log_{10}(x)log10(x) 位数字。
- 空间复杂度:O(1)O(1)。
性能结果:

小结:
优化算法的复杂度很重要啊。一个77ms,一个6ms,我对自己的实力表示无语。继续努力。
本文详细解析了两种整数反转算法:暴力拆解数字法和优化解法,并对比了其性能差异,展示了从77ms到6ms的优化效果。
302

被折叠的 条评论
为什么被折叠?



