LeetCode-7 Reverse Integer(倒置整型数)

编程之家收集整理的这篇文章主要介绍了LeetCode-7 Reverse Integer(倒置整型数)编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

LeetCode-7 Reverse Integer

Reverse digits of an integer.

Example1:x = 123,return 321
Example2:x = -123,return -321

click to show spoilers.

Have you thought about this?

Here are some good questions to ask before coding. Bonus points for you if you have already thought through this!

If the integer's last digit is 0,what should the output be? ie,cases such as 10,100.

Did you notice that the reversed integer might overflow? Assume the input is a 32-bit integer,then the reverse of 1000000003 overflows. How should you handle such cases?

For the purpose of this problem,assume that your function returns 0 when the reversed integer overflows.

Update (2014-11-10):
Test cases had been added to test the overflow behavior.

直接string倒置,

要留意NumberFormatException的问题,

通过catch这个异常来解决倒置后溢出的问题。

public class Solution {
	public int reverse(int x) {
		String prefix = ""; // 用作保存前缀
		if (x < 0) {
			x = -x;
			prefix = "-";
		}
		StringBuilder sb = new StringBuilder(prefix);
		String reverse = new StringBuilder(String.valueOf(x)).reverse()
				.toString();
		String str = sb.append(reverse).toString();

		try {
			return Integer.parseInt(str);
		} catch (NumberFormatException e) {
			return 0;
		}
	}
}

Runtime:275 ms

关于看到的另一种做法:

public class Solution {
    public int reverse(int x) {
        int output = 0;
    	for(;x!=0;x/=10){
    		output=output*10+x%10;
    	}
    	return output;
    }
}

这种做法觉得很强大代码很简洁~这是没考虑溢出的代码

但加入溢出情况的考虑后代码会比较多~不知道有没有其他同学有更简洁的写法~

如下:

public class Solution {
	public int reverse(int x) {
		boolean ifnegative = false;// 是否为负数
		if (x < 0) {
			// integer的范围是-2147483648~2147483647,
			// 取绝对值会漏了-2147483648的情况,所以在这里单独考虑。
			if (x == -2147483648) {
				return 0;
			} else {
				x = Math.abs(x);
				ifnegative = true;// 标记为负数
			}
		}
		int output = 0;
		for (; x != 0; x /= 10) {
			output = output * 10 + x % 10;
			if (output >= 214748364 && x >= 10) {
				if (output == 214748364) {// 若个位数以前未溢出
					if ((x / 10) > 7) {// 判断个位数是否会导致溢出
						return 0;
					} else {
						continue;
					}
				} else {// 即 output>214748364的情况,十位上已经溢出。
					return 0;
				}
			}
		}
		if (ifnegative) {
			return -output;
		} else {
			return output;
		}
	}
}


Runtime:253 ms

总结

以上是编程之家为你收集整理的LeetCode-7 Reverse Integer(倒置整型数)全部内容,希望文章能够帮你解决LeetCode-7 Reverse Integer(倒置整型数)所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢寻找一群志同道合、互帮互助的学习伙伴,可以点击下方链接加入:
编程之家官方1群
编程之家官方2群
编程之家官方3群
编程之家官方4群

相关文章

猜你在找的设计模式相关文章

什么是设计模式一套被反复使用、多数人知晓的、经过分类编目的、代码 设计经验 的总结;使用设计模式是为了 可重用 代码、让代码 更容易 被他人理解、保证代码 可靠性;设计模式使代码编制  真正工程化;设计模式使软件工程的 基石脉络, 如同大厦的结构一样;并不直接用来完成代码的编写,而是 描述 在各种不同情况下,要怎么解决问题的一种方案;能使不稳定依赖于相对稳定、具体依赖于相对抽象,避免引
单一职责原则定义(Single Responsibility Principle,SRP)一个对象应该只包含 单一的职责,并且该职责被完整地封装在一个类中。Every  Object should have  a single responsibility, and that responsibility should be entirely encapsulated by t
适配器模式将一个类的接口转换成客户期望的另一个接口,使得原本接口不兼容的类可以相互合作。
策略模式定义了一系列算法族,并封装在类中,它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中,使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
迭代器模式提供了一种方法,用于遍历集合对象中的元素,而又不暴露其内部的细节。
单例模式(Singleton Design Pattern)保证一个类只能有一个实例,并提供一个全局访问点。
组合模式可以将对象组合成树形结构来表示“整体-部分”的层次结构,使得客户可以用一致的方式处理个别对象和对象组合。
微信公众号搜索 “ 程序精选 ” ,选择关注!
微信公众号搜 "程序精选"关注