ReverseInteger
简介:给定一个32位有符号整数,求整数的反向数字
问题详解:给定一个int数字,求数字的反转数字
(int4个字节,即-2^31~2^31-1,即-2,,,~2,,,)
举例:
1.
输入:
输出:
2.
输入:-
输出:-
3.
输入:
输出:21
注意:反转数字后的大小是否在int范围之内
Java解法一:我分成两种情况讨论,正负数,利用StringBuilder().reverse().toString()进行反转,再分别与Integer.MIN_VALUE/Integer.MAX_VALUE比较,符合返回结果值,不符合返回0
官方实现一:PopandPushDigitsCheckbeforeOverflow
我们可以一次构建一个反向整数.在这样做的同时,我们可以事先检查是否附加另一个数字会导致溢出
算法:
可以与反转字符串类似地完成反转整数
要在不借助某些辅助堆栈/数组的情况下“弹出”和“推”数字,我们可以使用数学
//弹出操作:
pop=x%10;
x/=10;
//推送操作:
temp=rev*10+pop;
rev=temp;
复杂度分析:
时间复杂度:O(log(x))
空间复杂度:O(1).
注:
1.数学运算
舍掉小数取整:Math.floor(3.5)=3
四舍五入取整:Math.round(3.5)=4
进位取整:Math.ceil(3.1)=4
取绝对值:Math.abs(-3.5)=3.5
取余数:A%B=余数
2.Long-int转换
*将long型转化为int型,这里的long型是基础类型:
longa=10;intb=(int)a;
*将Long型转换为int型的,这里的Long型是包装类型:
Longa=10;intb=a.intValue();
*将int型转化为long型,这里的int型是基础类型:
inta=10;longb=(int)a;
*将Integer型转化为long型,这里的Integer型是包装类型:
inta=10;Longb=a.longValue();
3.java中基本数据类型:
byte1字节
short2字节
int4字节
long8字节
float4字节
double8字节
char2字节
boolean1字节
4.字符串反转
newStringBuilder(string).reverse().toString()
小白刷题之路,请多指教——要么大器晚成,要么石沉大海