您的位置:首页 > 财经 > 金融 > LeetCode 7题:整数翻转(原创)

LeetCode 7题:整数翻转(原创)

2024/12/23 19:51:01 来源:https://blog.csdn.net/IT_Fly/article/details/139601127  浏览:    关键词:LeetCode 7题:整数翻转(原创)

【题目描述】

【原题链接】. - 力扣(LeetCode)

 给你一个 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

【解题代码】

package number;import java.util.ArrayList;
import java.util.List;public class Reverse {public static void main(String[] args) {int x = 15340;System.out.println(reverse(x));}private static int reverse(int x) {if (x < -Integer.MAX_VALUE || x > Integer.MAX_VALUE) return 0;int m = x;int n;List<Integer> reverseNumbers = new ArrayList<>();while (m != 0) {n = m - (m / 10) * 10;if (reverseNumbers.size() > 0 || n != 0) {reverseNumbers.add(n);}m = m / 10;}long  i = 1;long result = 0;long tmp ;for (int j = reverseNumbers.size() - 1; j >= 0; j--) {tmp = i * reverseNumbers.get(j);result += tmp;if (result < -Integer.MAX_VALUE || result > Integer.MAX_VALUE) return 0;i *= 10;}return (int)result;}}

【解题思路】

        这道题我这次采用最简单的思路,就是通过反复除以10以及乘以10,依次取整数最后的数值,加到链表中,然后将链表中的数字依次取出乘以10相加

【解题步骤】

  1. 定义临时变量m,初始值为输入整数,当前数值m尾数字,存放所有数字的链表等变量;
    int m = x;
    int n;
    List<Integer> reverseNumbers = new ArrayList<>();
  2. 当m>0,不断对m取尾部数值,并放入链表中,并将m不断除以10
    while (m != 0) {n = m - (m / 10) * 10;if (reverseNumbers.size() > 0 || n != 0) {reverseNumbers.add(n);}m = m / 10;
    }
  3. 将链表中数字依次倒序取出,并不断乘10相加
    for (int j = reverseNumbers.size() - 1; j >= 0; j--) {tmp = i * reverseNumbers.get(j);result += tmp;if (result < -Integer.MAX_VALUE || result > Integer.MAX_VALUE) return 0;i *= 10;
    }
  4. 最后返回计算结果

    return (int)result;

【思考总结】

  1. 这道题解法比较简单,就是按十进制左右移位计算当前数据尾数值,并通过不断除以10,来获取整数所有数值;
  2. 稍微需要注意一点就是,整数最后连续的0也就是翻转过来的最高位是0的数字丢弃掉:
  3. LeetCode解题之前,一定不要看题解,看了就“破功”了!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com