LeetCode----- 7.Reverse Integer

Example1: x = 123,return 321 

Example2: x = -123,return -321

Note:
The input is assumed to be a 32-bit signed integer. Your function should return 0 when the reversed integer overflows.

输入假定为32位有符号整数。当反转的整数溢出时您的函数应返回0


解题思路:本题是将一个整型的数进行反转,然后输出。首先先检验数据的有效性,如果超过int型范围,直接输出为0,;检查传入的数据是否为负数,如果为负数转换为正数,并设置标志。然后将传入的整数转换成字符串,再接着转换成字符数组。接着使用两个变量start,end分别对应数组下标的首尾,然后循环遍历,将首尾对应的元素值进行互换。最后输出结果需要检验数据的有效性。

比如:1547483647----->反转后为----->7463847451,输出结果为0。

public static int reverse(int x) {
    	boolean flag = false;
    	if(x >2147483647 || x <-2147483647) {
    		return 0;
    	}
    	if(x < 0) {
    		x = Math.abs(x);
    		flag = true;
    	}
    	char[] ch = String.valueOf(x).toCharArray();
    	for(int start=0,end=ch.length-1;start<end;start++,end--) {
    		char c = ch[start];
    		ch[start] = ch[end];
    		ch[end] = c;
    	}
    	if(flag) {
    		if(-Long.parseLong(String.valueOf(ch))<-2147483647) {
    			return 0;
    		}else {
    			return -Integer.parseInt(String.valueOf(ch));
		}	
    	}else {
    		if(Long.parseLong(String.valueOf(ch)) >2147483647) {
    			return 0;
    		}else {
    			return Integer.parseInt(String.valueOf(ch));
		}	
	}	
 }



LeetCode上面的算法

    public static int reverse2(int x) {
    	int result = 0;
    	while(x != 0) {
    		int temp = x%10;
    		int newResult = result*10 + temp;
    		if((newResult - temp)/10 != result) {
    			return 0;
    		}
    		result = newResult;
    		x = x/10;
    	}
    	return result;
    }



写法3:题目是将Interger进行反转,可以直接从后往前依次添加到StringBuilder中,然后再转换回Interger类型。

    public static int reverse3(int x) {
    	StringBuilder sb = new StringBuilder();
    	String temp = String.valueOf(x);
    	if(x >2147483647 || x <-2147483647) {
    		return 0;
    	}
    	char ch = temp.charAt(0);
    	if(ch == '-') {
    		sb.append(ch);
    	}
    	for (int i = temp.length()-1; i>=0; i--) {
    		if(Character.isDigit(temp.charAt(i))) {
    			sb.append(temp.charAt(i));	
    		}					
		}
 		if(Long.valueOf(sb.toString())<-2147483647) {
			return 0;
		}else if(Long.valueOf(sb.toString()) > 2147483647){
			return 0;
		}else {
			return Integer.valueOf(sb.toString());
		}			
    }




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值