时隔一个月,再次拾起leetcode开始刷题。
我这种人吧,总是做一段时间,某天因为某个原因给搁置了,然后就没有然后了,等在想起来总能给自己那段时间寻找"合理"的借口,这种人是不是要一辈子成为loser呢?
题目:
Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321
注意: 一些边界条件的考虑可以在笔试或面试时为你的代码带来加分的效果
1. int x =0的情况,单独处理。
1.考虑翻转后的溢出问题; 一般溢出情况需要出题人声明 异常处理。
2. 如果最后都是0,该怎么处理? 例如 10,100等? 所以while判断的终止条件应该是x!=0 而不是余数怎么着怎么着。
http://blog.youkuaiyun.com/linhuanmars/article/details/20024837 (java 此博文中 任何越界返回值都为0)
1> public class Solution {
public int reverse(int x) {
if(x==0)
return x;
int t;
long y = 0;
int max = Integer.MAX_VALUE;
int min = Integer.MIN_VALUE;
while(x!=0){
t = x % 10; // [这两行改写成: y =y*10 + x % 10 ; ]
y = y*10 +t;
if(y > max || y < min){
y = 0;
return (int)y;
}
x = x/10;
}
return (int)y;
}
}
2> <a target=_blank href="http://blog.youkuaiyun.com/linhuanmars/article/details/20024837">http://blog.youkuaiyun.com/linhuanmars/article/details/20024837</a> (java 此博文中 任何越界返回值都为0)
public int reverse(int x) {
if(x==Integer.MIN_VALUE) //作者代码的巧妙之处。
return 0;
int num = Math.abs(x);
int res = 0;
while(num!=0)
{
if(res>(Integer.MAX_VALUE-num%10)/10) //作者代码额巧妙之处。
return 0;
res = res*10+num%10;
num /= 10;
}
return x>0?res:-res;
}
3> //reverse新思路,但是没有考虑溢出问题。
public static int reverse(int num){
char[] numArray = null;
String numStr="";
if (num == 0) {
return 0;
} else if (num > 0) {
numArray = (num + "").toCharArray();
System.out.println(numArray);
} else {
numStr+="-";
numArray = (num + "").substring(1).toCharArray();
System.out.println(numArray);
}
for(int i =numArray.length-1;i>=0;i--){
numStr+=numArray[i];
}
// return Integer.valueOf(numStr).intValue(); //String类型和int类型的转换 第一种方法
return Integer.parseInt(numStr); //String类型和int类型的转换 第二种方法
}
4> 参考别的人的C++代码: <a target=_blank href="http://blog.youkuaiyun.com/zhouworld16/article/details/16067825">http://blog.youkuaiyun.com/zhouworld16/article/details/16067825</a>
class Solution {
public:
int reverse(int x) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
const int max = 0x7fffffff; //int最大值
const int min = 0x80000000; //int最小值
long long sum = 0;
while(x != 0)
{
int temp = x % 10;
sum = sum * 10 + temp;
if (sum > max || sum < min) //溢出处理
{
sum = sum > 0 ? max : min;
return sum;
}
x = x / 10;
}
return sum;
}
};
java基础学习。