LeetCode算法题:整数反转reverse

给出一个 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,作为强制类型的转换。

猜你喜欢

转载自blog.csdn.net/weixin_43777983/article/details/89174879