逐位取余法(Java)
核心思想: 将整数逐位取余,得到每一位数字,相乘10倍并累加,最后判断是否在给定范围( 取值范围是从-2147483648至2147483647(-231至231-1),包括-2147483648和2147483647)
class Solution {
public int reverse(int x) {
int rev_x = 0;//反转后的结果
int digit = 0;//取余得到的每一位数字
while(x != 0){
//“/10”确保rev_x不越界,从而保证条件的正确性
if(rev_x > (Integer.MAX_VALUE / 10) || (rev_x < Integer.MIN_VALUE / 10))//判断是否在给定范围
return 0;
digit = x % 10;
x /= 10;
rev_x = rev_x * 10 + digit;//相乘10倍并累加
}
return rev_x;
}
}
利用字符串反转(Java)
核心思想: 利用StringBuilder的reverse()直接反转(主要是调整格式,玩玩即可,不要当真)
class Solution {
public int reverse(int x) {
String str_x = Integer.toString(x);//int转String
StringBuilder sb = new StringBuilder(str_x);//String转StringBuilder
String rev_str_x = sb.reverse().toString();//直接反转
int rev_int_x = 0;//反转后结果
//判断是否在给定范围(条件x>10和x<-10可改变)
if((x > 10 && Integer.parseInt(rev_str_x.substring(0,rev_str_x.length() - 1)) > (Integer.MAX_VALUE / 10)) ||
(x < -10 && Integer.parseInt('-' + rev_str_x.substring(0,rev_str_x.length() - 2)) < (Integer.MIN_VALUE / 10)))
return 0;
if(x > 0)//正整数不需要添加“-”号
rev_int_x = Integer.parseInt(rev_str_x);
if(x < 0)//负整数需要添加“-”号
rev_int_x = Integer.parseInt('-' + rev_str_x.substring(0,rev_str_x.length() - 1));
return rev_int_x;
}
}