LeetCode第七题(整数反转)

165 阅读1分钟

逐位取余法(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;
    }
}