1、题目
https://leetcode-cn.com/problems/reverse-integer/
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1: 输入: 123输出: 321
示例 2:输入: -123 输出: -321
示例 3:输入: 120 输出: 21
注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
2、实现
分析 :int的取值范围为: -2^31——2^31-1,即-2147483648——2147483647
边界值考虑:-2147483648
java
(一)stringBuffer类的reverse()方法
class Solution {
public int reverse(int x) {
//如果x=-2147483648,Math.abs(int x)还是会=-2147483648
long temp=Math.abs((long)x);
if(temp>Integer.MAX_VALUE){
return 0;
}
String str=String.valueOf(temp);
StringBuffer sb= new StringBuffer(str);
String s=sb.reverse().toString();
//考虑溢出
if(Long.parseLong(s)>Integer.MAX_VALUE){
return 0;
} else{
return x>0? Integer.parseInt(s):-Integer.parseInt(s);
}
}
}
(二)求余法
![]()
class Solution {
public int reverse(int x) {
int temp=Math.abs(x);
long result=0;
while(temp>0){
result=result*10+temp%10;
temp=temp/10;
}
if(result>Integer.MAX_VALUE){
return 0;
}
return (int)(x>0?result:-result);
}
}
python
class Solution(object):
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
result=0
if x<0:
x=-x
while x!=0:
result=result*10+x%10
x=x/10
result= -result
if x>0:
while x!=0:
result=result*10+x%10
x=x/10
if result>pow(2,31)-1 or result<-pow(2,31):
return 0
else:
return result
python的切片
class Solution:
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
res = int(str(x)[::-1]) if x > 0 else -int(str(abs(x))[::-1])
return res if -pow(2, 31) < res < pow(2, 31)-1 else 0
3、本题用到知识点
| java | python | |
| 绝对值函数abs | Math.java /*如果本题中,直接用Math.abs(int x) 如果x=-2147483648,那么Math.abs(-2147483648)=--2147483648=-2147483648 会溢出 */ //所以本题中应该先把参数转成long 然后调用Math.abs(long) 返回long类型
| #python是无显式类型的,所以就是取绝对值喽,没有int long 之分,想用就用喽 |
| 整型的边界值表示 | -2^31——2^31-1,即-2147483648——2147483647 [Integer.MIN_VALUE,Integer.MAX_VALUE] | [-pow(2,31),pow(2,31)-1] |
| 反转小助手 | StringBuffer类的reverse()
|
|
| 类型转换 | int转long: intx long t= (long)x
long转string: s=l+""; s=String.valueOf(l);
int 转string 第一种方法:s=i+"";
String 转int 第一种方法:i=Integer.parseInt(s); | 字符串转成int int(s) int转字符串 str(i) |
| 条件语句 | iif ( contation){ statement1; }else{ statement2; } 三目运算符 contation ?statement1:statement2
| statement1 if contation else statement2 |
4、补充
long 是长整型,在怎么长本身也是整型,12.10的整形部分是12,当然结果是12,
byte: 八位整数 -128——127,可用来节省内存的使用。
short: 16位整数 -32768——32,767,也比较省内存。
int: 32位整数 -2,147,483,648——2,147,483,647,一般来说整数都够用了
long: 64位整数 -9,223,372,036,854,775,808—— 9,223,372,036,854,775,807,一般不需要用
float: 32位浮点,如果浮点需要节省内存用这个。
Double: 64位浮点,一般非整数浮点可用这个。
但是要记住float和double都不是精确的,如果要储存钱一类的必须精确的,用java.math.BigDecimal

这篇博客详细介绍了LeetCode第7题‘整数反转’的解题思路与方法,包括Java和Python两种语言的实现。在Java中,通过stringBuffer的reverse方法和求余法解决;Python则利用切片操作实现。博客还讨论了整数类型的边界值和不同整数类型在内存中的表示,如byte、short、int、long以及浮点数的使用场景。
1120





