Leetcode-7-整数反转

7. 整数反转

难度简单2715收藏分享切换为英文接收动态反馈

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。

假设环境不允许存储 64 位整数(有符号或无符号)。

示例 1:

输入:x = 123
输出:321

示例 2:

输入:x = -123
输出:-321

示例 3:

输入:x = 120
输出:21

示例 4:

输入:x = 0
输出:0

提示:

  • -231 <= x <= 231 - 1

通过次数659,655

提交次数1,884,119


Given a signed 32-bit integer x, return x with its digits reversed. If reversing x causes the value to go outside the signed 32-bit integer range [-231, 231 - 1], then return 0.

Assume the environment does not allow you to store 64-bit integers (signed or unsigned).

Example 1:

Input: x = 123
Output: 321

Example 2:

Input: x = -123
Output: -321

Example 3:

Input: x = 120
Output: 21

Example 4:

Input: x = 0
Output: 0

Constraints:

  • -231 <= x <= 231 - 1

解法1:变成字符串,倒序提取放入stringbuffer,输出。

  public int reverse(int x) {
        int result = 0;
        String value = String.valueOf(x);
        StringBuilder sb = new StringBuilder();
        if (value.charAt(0) == '-') {
            sb.append('-');
            value = value.substring(1);
        }
        for (int i = value.length() - 1; i >= 0; i--) {
            sb.append(value.charAt(i));
        }
        try {
            result = Integer.valueOf(sb.toString());
        } catch (Exception e) {
        }
        return result;
}
image-20210422085029128

解法2:res = res * 10 + x % 10;

image-20210422091016716
class Solution {
    public static int reverse(int x) {
        boolean neg = ((x >>> 31) & 1) == 1;//符号位判断
        x = neg ? x : -x;//全部转成负数处理
        int m = Integer.MIN_VALUE / 10;
        int o = Integer.MIN_VALUE % 10;
        int res = 0;
        while (x != 0) {
            if (res < m || (res == m && x % 10 < o)) {//有效数判断
                return 0;
            }
            res = res * 10 + x % 10;
            x /= 10;
        }
        return neg ? res : Math.abs(res);
    }
}
image-20210422091114921

你可能感兴趣的:(Leetcode-7-整数反转)