首页 > 其他分享 >『LeetCode』7. 整数反转 Reverse Integer

『LeetCode』7. 整数反转 Reverse Integer

时间:2023-12-24 16:57:01浏览次数:50  
标签:10 return Reverse 示例 rev VALUE Integer 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

题目链接https://leetcode.cn/problems/reverse-integer/

『1』数学方法(模拟法)

解题思路

rev为翻转后的数字,为完成翻转,可以重复弹出x的末尾数字,将其推入rev的末尾,直至x0
注意该过程中若溢出则直接return 0
要在没有辅助栈或数组的帮助下「弹出」和「推入」数字,我们可以使用如下数学方法:

// 弹出 x 的末尾数字 digit
digit = x % 10
x /= 10
// 将数字 digit 推入 rev 末尾
rev = rev * 10 + digit

实现代码

class Solution {
    // Simulation
    // N is the number of digits in the number x
    // Time Complexity: O(log(N))
    // Space Complexity: O(1)
    public int reverse(int x) {
        if (x < 10 && x > -10) return x;

        int rev = 0;
        while (x != 0) {
            // rev = rev * 10 + x % 10 > Integer.MAX_VALUE
            // ==> rev > (Integer.MAX_VALUE - x % 10) / 10
            if (x > 0 && rev > (Integer.MAX_VALUE - x % 10) / 10) return 0;
            // rev = rev * 10 + x % 10 < Integer.MIN_VALUE
            // ==> rev < (Integer.MIN_VALUE - x % 10) / 10
            if (x < 0 && rev < (Integer.MIN_VALUE - x % 10) / 10) return 0;
            
            // x % 10 用于取出 x 的末位数(x 为负数则包括 x 的负号)
            // rev * 10 + x % 10 用于推入 x 的末位数
            rev = rev * 10 + x % 10;
            x /= 10; // 弹出末位数
        }
        return rev;
    }
}

标签:10,return,Reverse,示例,rev,VALUE,Integer,LeetCode
From: https://www.cnblogs.com/torry2022/p/17924547.html

相关文章

  • [LeetCode Hot 100] LeetCode739. 每日温度
    题目描述思路:单调递减栈使用单调栈的模板即可。根据题意可知,该题使用的是单调递减栈。问题抽象为:找出数组中右边第一个比我大的元素。方法一:classSolution{publicint[]dailyTemperatures(int[]temperatures){//用于存放结果int[]res=new......
  • [LeetCode Hot 100] LeetCode42. 接雨水
    题目描述思路一:单调栈柱子的高度递减的时候是装不了水的,当碰到第一个比之前高的柱子才可以装水。此时计算栈顶索引能装的水:宽:i-left-1(这个left为栈顶元素pop之后的peek值)高:min(height[left],height[i])-height[top]该题维护的是一个单调递减栈方法一:对应思路......
  • [LeetCode Hot 100] LeetCode84. 柱状图中最大的矩形
    题目描述思路:枚举+优化(单调栈)先固定矩阵的高。然后向左向右找到第一个比当前元素值小的元素,确定好左右边界。对于元素2来说:向左找到第一个比当前元素值小的元素:1的右边界向右找到第一个比当前元素值小的元素:3的右边界枚举每个元素的上边界,确定往左数最远到达哪个边界......
  • 『LeetCode』6. N 字形变换 Zigzag Conversion
    题目描述将一个给定字符串s根据给定的行数numRows,以从上往下、从左到右进行Z字形排列。比如输入字符串为"PAYPALISHIRING"行数为3时,排列如下:PAHNAPLSIIGYIR之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"。请你实现这......
  • 『LeetCode』5. 最长回文子串 Longest Palindromic Substring
    题目描述给你一个字符串s,找到s中最长的回文子串。如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。示例1:输入:s="babad"输出:"bab"解释:"aba"同样是符合题意的答案。示例2:输入**:s="cbbd"输出:"bb"提示:1<=s.length<=1000s仅由数字和英文字母组......
  • leetcode-88 合并两个有序数组
    题目要求:给你两个按非递减顺序排列的整数数组nums1和nums2,另有两个整数m和n,分别表示nums1和nums2中的元素数目。请你合并nums2到nums1中,使合并后的数组同样按非递减顺序排列。注意:最终,合并后数组不应由函数返回,而是存储在数组nums1中。为了应对这种情况,n......
  • 『LeetCode』3. 无重复字符的最长子串 Longest Substring Without Repeating Characte
    『1』双指针算法我的想法:一般看到字符串子串问题想到用双指针解,看到字符串子序列问题想到用动态规划解。此题用双指针可以很快解题。遍历字符串中的每个字符s.charAt[i],对于每一个i,找到j使得双指针[j,i]维护的是以s.charAt[i]结尾的无重复字符的最长子串,长度为i-j+1,......
  • [LeetCode] 热题100
    128最长连续序列publicclassSolution{publicintlongestConsecutive(int[]nums){if(nums==null||nums.length==0)return0;intans=1;HashMap<Integer,Integer>map=newHashMap<>();for(intnum:......
  • Leetcode—矩阵置零
    矩阵置零给定一个mxn的矩阵,如果一个元素为0,则将其所在行和列的所有元素都设为0。请使用原地算法。示例1:输入:输入:matrix=[[1,1,1],[1,0,1],[1,1,1]]输出:[[1,0,1],[0,0,0],[1,0,1]]示例2:输入:matrix=[[0,1,2,0],[3,4,5,2],[1,3,1,5]]输出:[[0,0,0,0],[0,4,......
  • Leetcode 2521. 数组乘积中的不同质因数数目
    https://leetcode.cn/problems/distinct-prime-factors-of-product-of-array/description/给你一个正整数数组nums,对nums所有元素求积之后,找出并返回乘积中不同质因数的数目。注意:质数是指大于1且仅能被1及自身整除的数字。如果val2/val1是一个整数,则整数val......