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

【解题代码】

java 复制代码
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尾数字,存放所有数字的链表等变量;

    java 复制代码
    int m = x;
    int n;
    List<Integer> reverseNumbers = new ArrayList<>();
  2. 当m>0,不断对m取尾部数值,并放入链表中,并将m不断除以10

    java 复制代码
    while (m != 0) {
        n = m - (m / 10) * 10;
        if (reverseNumbers.size() > 0 || n != 0) {
            reverseNumbers.add(n);
        }
        m = m / 10;
    }
  3. 将链表中数字依次倒序取出,并不断乘10相加

    java 复制代码
    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. 最后返回计算结果

    java 复制代码
    return (int)result;

【思考总结】

  1. 这道题解法比较简单,就是按十进制左右移位计算当前数据尾数值,并通过不断除以10,来获取整数所有数值;
  2. 稍微需要注意一点就是,整数最后连续的0也就是翻转过来的最高位是0的数字丢弃掉:
  3. LeetCode解题之前,一定不要看题解,看了就"破功"了!
相关推荐
Coovally AI模型快速验证4 小时前
农田扫描提速37%!基于检测置信度的无人机“智能抽查”路径规划,Coovally一键加速模型落地
深度学习·算法·yolo·计算机视觉·transformer·无人机
pusue_the_sun4 小时前
数据结构:二叉树oj练习
c语言·数据结构·算法·二叉树
RaymondZhao344 小时前
【全面推导】策略梯度算法:公式、偏差方差与进化
人工智能·深度学习·算法·机器学习·chatgpt
zhangfeng11335 小时前
DBSCAN算法详解和参数优化,基于密度的空间聚类算法,特别擅长处理不规则形状的聚类和噪声数据
算法·机器学习·聚类
圣保罗的大教堂5 小时前
leetcode 2348. 全 0 子数组的数目 中等
leetcode
啊阿狸不会拉杆5 小时前
《算法导论》第 32 章 - 字符串匹配
开发语言·c++·算法
小学生的信奥之路6 小时前
洛谷P3817题解:贪心算法解决糖果分配问题
c++·算法·贪心算法
你知道网上冲浪吗7 小时前
【原创理论】Stochastic Coupled Dyadic System (SCDS):一个用于两性关系动力学建模的随机耦合系统框架
python·算法·数学建模·数值分析
地平线开发者8 小时前
征程 6 | PTQ 精度调优辅助代码,总有你用得上的
算法·自动驾驶
Tisfy9 小时前
LeetCode 837.新 21 点:动态规划+滑动窗口
数学·算法·leetcode·动态规划·dp·滑动窗口·概率