(7)-(Reverse Integer)-(将整数按位反转成另外一个整数,考虑溢出)-(知道最大整数和最小整数值) //Reverse digits of an integer. //Example1: x = 123, return 321 //Example2: x = -123, return -321 //需要考虑正负数 //最大正整数,Integer.MAX_VALUE=2147483647 //最小负整数,Integer.MIN_VALUE=-2147483648 public class Solution { public int reverse(int x) { if(x==0) { return x; } int final_x=0, temp_x=0; int [] x_val=new int[100]; int curr_i=0; //当前位数 int x_save=0; //当前位的余数,准备保存 int positive=1; if(x<0) { positive=-1; //是负数 //特殊情况,因为负数的距离更大一位 if(x==-2147483648) { return 0; } x=x*-1; } while(x>9) { x_save=x%10; x_val[curr_i]=x_save; //当前位的余数,进行保存 x=x/10; curr_i++; } //还剩下最后一位余数,进行保存 x_val[curr_i]=x; curr_i++; //(1)不管合理不合理,我已经进行了保存了,再分析反转后的数字他到底是不是整数 //(2)原来的数字是不用进行分析的,因为传进来就是一个int啊,肯定是合理的 //(3)不能在整合结束后再进行处理,因为有可能这个int的值已经溢出了 for(int i=0;i<curr_i;i++) { if(final_x<214748364) { final_x = final_x * 10; final_x=final_x+x_val[i]; } else { if(final_x==214748364) { if(x_val[i]<8) { final_x = final_x * 10; final_x=final_x+x_val[i]; } else { final_x=0; } } else { final_x=0; } } } //如果是负数,乘以-1 if(positive==-1) { final_x=final_x * -1; } return final_x; } }