字节跳动高频面试题-7.整数反转

解法都在代码里,不懂就留言或者私信

这个题排在字节跳动半年榜的第64题,但是题目确实远非如此,我知道的最近一个月至少考过4次,还是必须掌握的

class Solution {
    public int reverse(int x) {
        /**一位的整数,不管是整数还是负数,没有什么可反转的,反转了和自己也一样 */
        if(x >= -9 && x <= 9) {
            return x;
        }
        /**负数的承载范围比较大,统一转换为负数处理,转换之前记录一下是否为正数
        如果是正数,最后的结果取相反数 */
        boolean isPositive = x > 0;
        x = isPositive? -x : x;
        /**基本思路是按照每次取余然后乘在高位,然后往高位一位一位取余重复操作
        这个过程中一定要注意是否超过了int的范围,比如Integer.MAX_VALUE和MIN_VAVLUE相反之后都会超出
        超出直接返回0*/
        /**当前数到了多少*/
        int curNum = 0;
        /**记录两个值minLastDigitNum和minDivide10分别表示Integer.MIN_VALUE%10和Integer.MIN_VALUE/10
        之后的值,这个值用于反转过程中的越界判断 */
        int minLastDigitNum = Integer.MIN_VALUE % 10;
        int minDivide10 = Integer.MIN_VALUE /10;
        while(x != 0) {
            /**要计算的下一位 */
            int curDigitNum = x %10;
            /**任何一种发生都说明要越界了,越界就返回0 */
            if(curNum < minDivide10 || (curNum == minDivide10 && curDigitNum < minLastDigitNum)) {
                return 0;
            }
            /**使用之前的结果*10+当前位 */
            curNum = curNum * 10 + curDigitNum;
            x = x / 10;
        }
        /**最后根据正负数确认最终结果,正数的注意处理越界 */
        return isPositive? (curNum == Integer.MIN_VALUE? 0 : -curNum) : curNum;
    }
}

这种题估计写出来的都是最优解吧,哈哈

字节跳动高频面试题-7.整数反转_第1张图片

你可能感兴趣的:(字节跳动高频面试题,数据结构与算法,Leetcode,leetcode,算法,面试)