解决方案:
package com.example.demo;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class IntInversion {
/**
* 证书反转
*/
@Test
public void contextLoads() {
int s=reverse(1534236469);
System.out.println(s);
}
/**
* 第一个想法-反转字符串,效率太低
* 执行用时 :4 ms, 在所有 java 提交中击败了47.75%的用户
* 内存消耗 :35.7 MB, 在所有 java 提交中击败了77.46%的用户
* @param s
* @return
*/
public int reverse(int s) {
String str=String.valueOf(s);
String result="";
int o=0;
try{
for (int i = str.length()-1;i >=0 ; i--) {
String cur=String.valueOf(str.charAt(i));
if(cur.equals("-")){
result="-"+result;
}else{
result+=cur;
}
}
o=Integer.valueOf(result).intValue();
}
catch (NumberFormatException e) {
return 0;
}
return o;
}
/**
* 第二个想法
* 每次循环原始数都/10取余,取到当前数字并且让前一个数字进位(*10),然后相加
* 123 => 321
* 第一次循环,x=123 余数是3 然后当前不需要进位 结果也就是3
* 第二次循环 x=12 余数是2 然后上次循环获取的3 进位+余数 =>30+2 结果也就是32
* 第三次循环 x=1 余数是1 然后上次循环获取的2 进位+余数 =>32*10+1 结果也就是321
* @param x
* @return
*/
public int reverse2(int x) {
long result=0;
if(Integer.MIN_VALUE<x||x<Integer.MAX_VALUE){
while(x!=0){
result=result*10+x%10;
x=x/10;
}
}
return (int)result;
}
}