春季每日一题打卡day1—— 整数反转

Posted Johnny*

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了春季每日一题打卡day1—— 整数反转相关的知识,希望对你有一定的参考价值。

整数反转

【题目描述】

在这里插入图片描述

7. 整数反转

解法一

【思路】
用字符处理整数,防止翻转之后范围超过32位整数的范围
由于是有符号整数,要分类讨论

  1. 正整数。a. 当翻转之后字符串长度小于max,则没有越界,正常返回。b.字符串长度相同,使用了字符串的比较方法 compareTo来界定是否有超过整数范围。
  2. 负数也同理
class Solution {
    public int reverse(int x) {
        //1. 字符串处理
        String s = String.valueOf(x);
        //2. 正负数判断
        boolean sign = false;
        
        String max = String.valueOf(Integer.MAX_VALUE);
        String min = String.valueOf(Integer.MIN_VALUE).substring(1);
        
        if( s.charAt(0) == '-') {
            sign = true;
            s = s.substring(1);
        }//2147483647
        StringBuffer sb =  new StringBuffer(s);
        String ns = sb.reverse().toString();
        if(sign){
            if(ns.length() < min.length() ) return Integer.parseInt( "-"+ns);//长度小于min 值肯定没有超过min范围
            else if( ns.compareTo(min) <= 0) return  Integer.parseInt( "-"+ns);//长度相等时才比较大小
            else return 0;
            
        }else{
            if(ns.length() < max.length() ) return Integer.parseInt(ns);
            else if(ns.compareTo(max) <= 0 ) return Integer.parseInt(ns);
            else return 0;
        }
        
        

    }
}

解法二

  1. int类型res记录翻转之后的值,对x每次进行模10操作取个位,并将模10结果拼接到res末尾,然后x/=10。
  2. 在进行1操作 之前,需要判断是否超出了32位有符号整数范围。
    a. x是正整数,如果 res *10 + x % 10 > Integer.MAX_VALUE ,即 res > (Integer.MAX_VALUE - x %10) /10,则返回0;
    b. x是负整数,如果 res *10 + x % 10 < Integer.MIN_VALUE ,即 res < (Integer.MIN_VALUE - x %10) /10,则返回0;
class Solution {
    public int reverse(int x) {
        
        int res = 0;
        while( x!= 0){
            
            if( x > 0 && res > ( Integer.MAX_VALUE - x % 10) /10 ) return 0;
            if( x < 0 && res < ( Integer.MIN_VALUE - x % 10) /10 ) return 0;
            res = res *10 + x % 10;
            x /= 10;
        }
        return res;

    }
}

以上是关于春季每日一题打卡day1—— 整数反转的主要内容,如果未能解决你的问题,请参考以下文章

春季每日一题打卡day2 —— AcWing 435. 传球游戏

夏季每日一题打卡day1 —— AcWing 3485. 最大异或和

2021春季每日一题 week1 未完结

每日一题 | 曾被反转链表支配的恐惧

每日一题 | 曾被反转链表支配的恐惧

7.整数反转Java版,每日一题系列(此题来自力扣网)