给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
这是一道简单题。思路并不难,注意的细节比较多:
1.给定x的正负问题
2.反转后的逻辑细节,如2100反转后应为12
3.数据溢出判断与处理
思路:
1.利用变量a来判断给定x的正负
2.使用StringBuffer类来反转x并处理反转后的细节
3.利用try-catch来判断反转后是否存在数据溢出
代码如下:
public int reverse(int x) {
int a=0;//a=0说明x是正数,1为负数
if(x<0){
x=0-x;
a=1;
}
StringBuffer sb=new StringBuffer();
sb.append(x);
sb.reverse();
//判断反转后前面有0没
for(int i=0;i<sb.length();i++){
if(sb.charAt(i)!=0){
break;
}
sb.deleteCharAt(i);
}
//判断x是否溢出
int current;
try{
current=Integer.parseInt(sb.toString());
}catch(Exception e){
return 0;
}
//变为负数
if(a==1){
current=0-current;
}
return current;
}
状态 执行用时 内存消耗 语言
通过 7 ms 32.6 MB java
总结:
1.StringBuffer类中的方法主要偏重于对于字符串的变化,例如追加、插入和删除等,这个也是StringBuffer和String类的主要区别。
(1)reverse方法
public StringBuffer reverse()
该方法的作用是将StringBuffer对象中的内容反转,然后形成新的字符串。例如:
StringBuffer sb = new StringBuffer(“abc”);
sb.reverse();
经过反转以后,对象sb中的内容将变为”cba”。
(2)deleteCharAt方法
public StringBuffer deleteCharAt(int index)
该方法的作用是删除指定位置的字符,然后将剩余的内容形成新的字符串。例如:
StringBuffer sb = new StringBuffer(“Test”);
sb. deleteCharAt(1);
该代码的作用删除字符串对象sb中索引值为1的字符,也就是删除第二个字符,剩余的内容组成一个新的字符串。所以对象sb的值变为”Tst”。
2.try-catch的使用
int型变量的范围是-2147483648 ~ 2147483647,在最大值时加1 int型变量会变为最小值。同时,如果Integer.parseInt()方法中括号输入的int型变量出现了数据溢出(即超出了int型变量的范围)则报NumberFormatException异常,所以利用try-catch捕获异常并依题意返回0.
为了避免 int 类型的溢出,可以在该表达式中的任一常量后加上大写的“L”,或
是在变量前面加上 long,作为强制类型的转换。