第七题:整数反转(Reverse Integer)

2024-08-25 11:04

本文主要是介绍第七题:整数反转(Reverse Integer),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目描述:

给定一个 32 位有符号整数 x,返回其反转后的整数。反转后的整数可能会超出 32 位整数的范围,因此需要注意处理溢出情况。

示例:

  1. 输入:x = 123
    输出:321

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

  3. 输入:x = 120
    输出:21

  4. 输入:x = 0
    输出:0

要求: 需要考虑反转后的整数是否会超出 32 位整数的范围。32 位有符号整数的范围是 ([-2^{31}, 2^{31} - 1]),即 ([-2147483648, 2147483647])。

解题思路

  1. 处理符号

    • 记录整数的符号(正或负),然后将整数转为正数来进行处理。
  2. 反转整数

    • 通过逐位提取整数的末尾数字,并将其添加到新整数的末尾,从而反转整数。
  3. 检查溢出

    • 在每次更新反转结果时,检查是否会发生溢出。如果结果超出了32位整数的范围,则返回0。

C 语言实现

#include <limits.h>int reverse(int x) {int reversed = 0;while (x != 0) {int digit = x % 10;// Check for overflow/underflowif (reversed > (INT_MAX - digit) / 10 || reversed < (INT_MIN - digit) / 10) {return 0;}reversed = reversed * 10 + digit;x /= 10;}return reversed;
}

Java 实现

public class Solution {public int reverse(int x) {int reversed = 0;while (x != 0) {int digit = x % 10;// Check for overflow/underflowif (reversed > Integer.MAX_VALUE / 10 || (reversed == Integer.MAX_VALUE / 10 && digit > 7)) {return 0;}if (reversed < Integer.MIN_VALUE / 10 || (reversed == Integer.MIN_VALUE / 10 && digit < -8)) {return 0;}reversed = reversed * 10 + digit;x /= 10;}return reversed;}
}

Python 实现

def reverse(x: int) -> int:reversed_x = 0sign = -1 if x < 0 else 1x *= signwhile x != 0:digit = x % 10# Check for overflow/underflowif reversed_x > (2**31 - 1 - digit) // 10:return 0reversed_x = reversed_x * 10 + digitx //= 10return reversed_x * sign

时间复杂度

时间复杂度: (O(\log_{10} n)),其中 (n) 是输入整数的绝对值。因为我们处理的每一位数字需要一次操作,整数的位数与其值的对数成正比。

空间复杂度: (O(1))。我们只使用了常数级别的额外空间来存储反转后的结果和处理过程中的变量。

这篇关于第七题:整数反转(Reverse Integer)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1105382

相关文章

使用C语言实现交换整数的奇数位和偶数位

《使用C语言实现交换整数的奇数位和偶数位》在C语言中,要交换一个整数的二进制位中的奇数位和偶数位,重点需要理解位操作,当我们谈论二进制位的奇数位和偶数位时,我们是指从右到左数的位置,本文给大家介绍了使... 目录一、问题描述二、解决思路三、函数实现四、宏实现五、总结一、问题描述使用C语言代码实现:将一个整

Java反转字符串的五种方法总结

《Java反转字符串的五种方法总结》:本文主要介绍五种在Java中反转字符串的方法,包括使用StringBuilder的reverse()方法、字符数组、自定义StringBuilder方法、直接... 目录前言方法一:使用StringBuilder的reverse()方法方法二:使用字符数组方法三:使用自

Springboot控制反转与Bean对象的方法

《Springboot控制反转与Bean对象的方法》文章介绍了SpringBoot中的控制反转(IoC)概念,描述了IoC容器如何管理Bean的生命周期和依赖关系,它详细讲解了Bean的注册过程,包括... 目录1 控制反转1.1 什么是控制反转1.2 SpringBoot中的控制反转2 Ioc容器对Bea

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

Spring IOC控制反转的实现解析

《SpringIOC控制反转的实现解析》:本文主要介绍SpringIOC控制反转的实现,IOC是Spring的核心思想之一,它通过将对象的创建、依赖注入和生命周期管理交给容器来实现解耦,使开发者... 目录1. IOC的基本概念1.1 什么是IOC1.2 IOC与DI的关系2. IOC的设计目标3. IOC

PTA求一批整数中出现最多的个位数字

作者 徐镜春 单位 浙江大学 给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定3个整数1234、2345、3456,其中出现最多次数的数字是3和4,均出现了3次。 输入格式: 输入在第1行中给出正整数N(≤1000),在第二行中给出N个不超过整型范围的非负整数,数字间以空格分隔。 输出格式: 在一行中按格式“M: n1 n2 ...”输出,其中M是最大次数,n

整数Hash散列总结

方法:    step1  :线性探测  step2 散列   当 h(k)位置已经存储有元素的时候,依次探查(h(k)+i) mod S, i=1,2,3…,直到找到空的存储单元为止。其中,S为 数组长度。 HDU 1496   a*x1^2+b*x2^2+c*x3^2+d*x4^2=0 。 x在 [-100,100] 解的个数  const int MaxN = 3000

控制反转 的种类

之前对控制反转的定义和解释都不是很清晰。最近翻书发现在《Pro Spring 5》(免费电子版在文章最后)有一段非常不错的解释。记录一下,有道翻译贴出来方便查看。如有请直接跳过中文,看后面的原文。 控制反转的类型 控制反转的类型您可能想知道为什么有两种类型的IoC,以及为什么这些类型被进一步划分为不同的实现。这个问题似乎没有明确的答案;当然,不同的类型提供了一定程度的灵活性,但

单精度浮点数按存储格式转为整数的程序

///#include<cstdio>//-----------------union int_char{unsigned char ch[4];float i;};void out_put(union int_char x)//x86是小端对其模式,即最数据的最低位存储在地址的最低位上。{printf("单精度浮点数值为:%f\n",x.i,x.i);printf("存储位置从左到右

leetcode#541. Reverse String II

题目 Given a string and an integer k, you need to reverse the first k characters for every 2k characters counting from the start of the string. If there are less than k characters left, reverse all of