尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

DeepSeek LeetCode 7.整形反转 Java实现

DeepSeek    LeetCode 7.整形反转 Java实现 我来帮你实现 LeetCode 7. 整数反转 的 Java 解法。题目描述给你一个 32 位的有符号整数 x返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−2³¹, 2³¹−1]就返回 0。解法一数学方法推荐javaclass Solution {public int reverse(int x) {int result 0;while (x ! 0) {// 取出最后一位int digit x % 10;x / 10;// 检查溢出反转前判断// 正数溢出result Integer.MAX_VALUE/10// 或者 result Integer.MAX_VALUE/10 且 digit 7if (result Integer.MAX_VALUE / 10 ||(result Integer.MAX_VALUE / 10 digit 7)) {return 0;}// 负数溢出result Integer.MIN_VALUE/10// 或者 result Integer.MIN_VALUE/10 且 digit -8if (result Integer.MIN_VALUE / 10 ||(result Integer.MIN_VALUE / 10 digit -8)) {return 0;}result result * 10 digit;}return result;}}解法二使用 long 类型简洁版javaclass Solution {public int reverse(int x) {long result 0;while (x ! 0) {result result * 10 x % 10;x / 10;}// 检查是否在 int 范围内if (result Integer.MAX_VALUE || result Integer.MIN_VALUE) {return 0;}return (int) result;}}解法三字符串反转不推荐javaclass Solution {public int reverse(int x) {String s String.valueOf(Math.abs((long)x));StringBuilder sb new StringBuilder(s).reverse();try {int result Integer.parseInt(sb.toString());return x 0 ? -result : result;} catch (NumberFormatException e) {return 0;}}}核心思路解析方法一数学方法1. 每次取出 x 的最后一位digit x % 102. 更新 xx / 103. 构建结果result result * 10 digit4. 关键每次构建前检查是否会溢出溢出判断详解· 正数溢出条件· result Integer.MAX_VALUE / 10乘10后肯定溢出· result Integer.MAX_VALUE / 10 digit 7正好在边界且 digit 7MAX_VALUE 2147483647· 负数溢出条件· result Integer.MIN_VALUE / 10乘10后肯定溢出· result Integer.MIN_VALUE / 10 digit -8正好在边界且 digit -8MIN_VALUE -2147483648示例输入: 123输出: 321输入: -123输出: -321输入: 120输出: 21 (末尾的0被舍去)输入: 1534236469输出: 0 (反转后 9646324351 超出范围)复杂度分析· 时间复杂度O(log₁₀ n)数字的位数· 空间复杂度O(1)注意事项1. 负数处理Java 中 % 运算保留符号所以 -123 % 10 -3不需要额外处理负数2. 溢出处理必须在反转前检查不能在反转后检查会丢失精度3. 边界值Integer.MAX_VALUE 2147483647Integer.MIN_VALUE -21474836484. 尾随零120 → 21反转后自动去除前导零常见错误java// ❌ 错误写法反转后检查溢出int result 0;while (x ! 0) {result result * 10 x % 10; // 这里可能已经溢出x / 10;}if (result Integer.MAX_VALUE || result Integer.MIN_VALUE) {return 0; // 永远执行不到因为溢出后值已经变了}推荐使用方法一性能最优且不需要额外空间方法二代码更简洁但使用了 long 类型。需要我详细解释溢出判断逻辑吗
返回列表