您的位置:首页 > 其它

LeetCode Reverse Integer(整数翻转)

2018-04-10 16:44 465 查看
在上一篇博客中我讲了怎样去翻转一个单链表,这里介绍一下怎样去翻转一个整数,看似翻转整数要比翻转链表简单很多,其实确实要简单一些哈,不过可能考虑的情况就会更多一些,下面是题目要求:

Reverse Integer

Given a 32-bit signed integer, reverse digits of an integer.
Example 1:Input: 123
Output: 321
Example 2:Input: -123
Output: -321
Example 3:Input: 120
Output: 21
Note:
Assume we are dealing with an environment which could only hold integers within the 32-bit signed integer range. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.
由题意得,我们在翻转时得考虑三种情况,第一得考虑正负整数吧,第二得考虑以0结尾的数字,第三就得看Note了,一般LeetCode里面的注意讲的都是边界值考虑,在这里呢,它的大概意思就是我们只能处理在32位带符号整数范围内的值,当完成一个整数翻转后,若它超出了这个范围,我们则返回一个0值,实际上Java对于溢出值就是返回0值,刚看到这道题呢,觉着挺简单的,也确实做出来了,一次AC,不过总觉着缺少了点什么,又去翻了翻社区,发现自己的算法确实有点low了哈哈,总结就是自己对循环递归的思想掌握的确实不是很好,这也是我以后会多加注意和练习的地方,这里我把我的代码和大佬的代码都给大家贴一下哈......
第一种解法:
package com.gaoxue.LeetCode;

public class ReverseInteger {

public int reverse(int x) {
long sum = 0;
String s2 ="";
StringBuffer sb = null;
String s = String.valueOf(x);
if(s.contains("-")) {
s2 = s.substring(1, s.length());
sb = new StringBuffer(s2);
}else {
sb = new StringBuffer(s);
}
String str = sb.reverse().toString();
for(int i=0,j=str.length()-1;i<str.length();i++,j--) {
sum += Math.pow(10, j)*(str.charAt(i)-'0');
}
if(sum>Integer.MAX_VALUE)
return 0;
if(s.contains("-")) {
return (int)(0-sum);
}else {
return (int)sum;
}
}
public static void main(String[] args) {
System.out.println(new ReverseInteger().reverse(1534236469));
}
}第二种解法:
package com.gaoxue.LeetCode;

public class ReverseInteger {

public int reverse(int x) {
long result =0;
while(x != 0)
{
result = (result*10) + (x%10);
if(result > Integer.MAX_VALUE) return 0;
if(result < Integer.MIN_VALUE) return 0;
x = x/10;
}
return (int)result;
}
public static void main(String[] args) {
System.out.println(new ReverseInteger().reverse(1534236469));
}
}
总结一下,觉着自己总是喜欢站在字符串的角度,习惯了以线性的方式去考虑问题,而没有太多的去关注数据本身,或许这才是算法本身的奥秘吧,对了,这里给大家推荐一下LeetCode这个刷题平台,挺不错的,题目难度分了中高低三类,建议新手先去拿easy题练手,这些题会让你的基础有很大的提高,然后每天可以做个三五道简单题,题不再多,重在坚持,然后就是每天总结一下自己学到的算法思想,这会给我们带来很大帮助的,好啦,赶紧开始刷题吧~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息