给定一个32位的有符号整数num,将num中的数字部分反转,最后返回反转的结果
1.只反转数字部分,符号位部分不反转
2.反转后整数num超过 32 位的有符号整数的范围 [−231, 231 − 1] ,返回 0
3.假设本题不允许存储 64 位整数(有符号或无符号,即C++不能使用long long ,Java不能使用long等)
数据范围:
-231 <= x <= 231-1
12
21
-123
-321
10
1
1147483649
0
public int reverse (int x) {
int j = 1, rev = 0;
// if (x > 2147483647 || x < -2147483648) {
// return 0;
// }
if (x < 0) {
rev = -1;
j=-1;
}
x = Math.abs(x);
String a = "" + x;
if (a.length() >8) {
if(x>0){
rev = x-(x/1000000000 *1000000000) ;
}else if(x<0){
rev = x+(x/1000000000 *1000000000) ;
}
String b = rev + "";
b = new StringBuffer(b).reverse().toString();
rev = Integer.parseInt(b);
if(x<0){rev=rev*j;}
if (rev*j > 214748364 || (rev*j <= 214748364 && rev / 1000000000 > 7)) {
return 0;
}
if (rev*j < -214748364 || (rev*j >= -214748364 && rev / 1000000000 < -8)) {
return 0;
}
}
if (a.substring(a.length() - 1) != "-") {
a = new StringBuffer(a).reverse().toString();
}
x = Integer.parseInt(a);
return (x * j);
} public int reverse (int x) {
// write code here
int res=0;
while(x!=0){
if(res>=Integer.MAX_VALUE/10 || res<=Integer.MIN_VALUE/10){
return 0;
}
res=res*10+x%10;
x/=10;
}
return res;
} public int reverse(int num) {
boolean negative = false;
if (num < 0) {
num = -num;
negative = true;
}
int result = 0;
while (num != 0) {
int digit = num % 10;
int newresult = result * 10 + digit;
if (((newresult - digit) / 10) != result) {
return 0;
}
result = newresult;
num = num / 10;
}
if (negative) {
result = -result;
}
return result;
} 转成字符串来处理
import java.util.*;
public class Solution {
/**
*
* @param x int整型
* @return int整型
*/
public int reverse (int x) {
String str = "" + x;
if (str.startsWith("-")) { //负数,最小值-2147483648
String noneStr = reverseStr(str.substring(1));
String aStr = "-" + noneStr;
String outStr="2147483648";
if(noneStr.length()==outStr.length()&&isOutOfRange(outStr,noneStr)){
return 0;
}
return Integer.parseInt(aStr);
} else { //正数,最大值2147483647
String b = reverseStr(str);
String bigestStr = "2147483647";
if (b.length() == bigestStr.length()&&isOutOfRange(bigestStr,b)) {
return 0;
}
return Integer.parseInt(b);
}
}
public boolean isOutOfRange(String rangeStr, String currStr) {
if(currStr.startsWith("0")){//处理特殊值,例如2147483640,倒转之后是不会越界的
return false;
}
for (int i = 0; i < rangeStr.length(); i++) {
int num1 = Integer.parseInt("" + currStr.charAt(i));
int num2 = Integer.parseInt("" + rangeStr.charAt(i));
if (num1 > num2) {
return true;
}
}
return false;
}
public String reverseStr(String str) {
if (str == null || str.length() == 0) {
return "";
}
return reverseStr(str.substring(1)) + str.charAt(0);
}
}
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param x int整型
* @return int整型
*/
public int reverse (int x) {
// write code here
int tag = 1;
if (x < 0) {
tag = -1;
x = -x;
}
int a = x, b = 0;
while (a != 0) {
if(b > Integer.MAX_VALUE / 10|| x < Integer.MIN_VALUE / 10) return 0;
b = b * 10 + a % 10;
a = a / 10;
}
return b * tag;
}
} public int reverse (int x) {
// write code here
int m=0,n=0;
while(x!=0){
m=m*10;
m+=x%10;
x=x/10;
if(m==Integer.MAX_VALUE/10&&x%10>Integer.MAX_VALUE%10||m>Integer.MAX_VALUE/10&&x!=0||m==Integer.MIN_VALUE/10&&x%10>Integer.MIN_VALUE%10
||m<Integer.MIN_VALUE/10&&x!=0){
return 0;
}
}
return m;
} public int reverse (int x) {
// write code here
int y=0;
if(x>0){
String s=x+"";
String ss=new StringBuffer(s).reverse().toString();
try{
y=Integer.parseInt(ss);
}catch(Exception e){
return 0;
}
}else if(x==0){
y=x;
}else{
String s=Math.abs(x)+"";
String ss=new StringBuffer(s).reverse().toString();
try{
y=(-1)*Integer.parseInt(ss);
}catch(Exception e){
return 0;
}
}
return y;
} import java.util.*;
public class Solution {
/**
*
* @param x int整型
* @return int整型
*/
public int reverse (int x) {
// write code here
int ans = 0;
while(x != 0) {
if(ans >= Integer.MAX_VALUE/10 || ans <= Integer.MIN_VALUE/10) {
return 0;
}
ans = ans*10 + x%10;
x = x/10;
}
return ans;
}
} 哪有那么复杂,而且好多答案都用了long
public int reverse (int x) {
// write code here
final int limit = Integer.MAX_VALUE / 10;
int val = 0;
while (x != 0) {
if (val > limit || val < -limit)
return 0;
val = val * 10 + x % 10;
x /= 10;
}
return val;
} 其实只有溢出需要额外判断,也就是先用 INT_MAX / 10 = 214748364 判断溢出,然后计算 val
不能先计算 val 再用 INT_MAX 和 INT_MIN 判断,因为 val 可能溢出
至于为什么不需要处理等于 214748364 的情况,因为这种情况不可能出现,假设这一轮计算得 val = 214748364x,原来的数一定是 x463847412,又因为是 32 位整数,x 只能为 0 或 1,因此 val 一定不会溢出
这网站编辑器都好难用啊
public int reverse (int x) {
// write code here
String origin = String.valueOf(x); //将int转化为string进行操作
String res = ""; //存放最终结果
boolean flag = false; //false代表正数
if(x == 0 || x < Integer.MIN_VALUE / 10 || x >= Integer.MAX_VALUE / 10){
return 0;
}
//如果是10的倍数 包括10 100 120等等 一直除以10 除到不是10的倍数就停止
if(x % 10 == 0 ){
int num = x / 10;
while(num % 10 == 0){
num = num / 10;
}
origin = String.valueOf(num); //因为反之像120这种返回的是21
//所以还需要继续按照下面的for循环
}
for(int i = 0 ; i < origin.length() ; i ++){
if(origin.charAt(i) == '-'){
flag = true; //是负数
}else{
res = String.valueOf(origin.charAt(i)) + res;
}
}
if(flag == true){
res = "-" + res;
}
return Integer.parseInt(res);
} import java.util.*;
public class Solution {
/**
*
* @param x int整型
* @return int整型
*/
public int reverse (int x) {
int fu=x>0?1:-1;
x=Math.abs(x);
if(x==0)return 0;
long num=0;
while(x!=0){
int y= x%10;
num=num*10+y;
if(num>Integer.MAX_VALUE) return 0;
x=x/10;
}
return fu*(int)num;
}
}
public int reverse (int x) {
// write code here
int reverse = 0;
while(x != 0){
if (reverse > Integer.MAX_VALUE / 10 || (reverse == Integer.MAX_VALUE / 10 && x % 10 > 7))
return 0;
if (reverse < Integer.MIN_VALUE / 10 || (reverse == Integer.MIN_VALUE / 10 && x % 10 < -8))
return 0;
reverse = reverse * 10 + x % 10;
x = x/10;
}
return reverse ;
} import java.util.*;
public class Solution {
/**
*
* @param x int整型
* @return int整型
*/
public int reverse (int x) {
String str=String.valueOf(x);
char []arr=str.toCharArray();
String new_x="";
//如果溢出返回0
if(arr.length>=10){
return 0;
}
//使用倒序添加到新的字符串上
for(int i=arr.length-1;i>=0;i--){
new_x+=arr[i];
}
//如果有负号的话,进行分割
if(new_x.contains("-")){
String [] a=new_x.split("-");
return -Integer.parseInt(a[0]);
}
return Integer.parseInt(new_x);
}
} public int reverse (int x) {
int res = 0;
boolean flag = false;
if(x < 0){
flag = true;
x = -x;
}
while(x > 0){
if(res > Integer.MAX_VALUE/10 || (res == Integer.MAX_VALUE/10 && x > Integer.MAX_VALUE%10)){
return 0;
}
res = res * 10 + x % 10;
x = x / 10;
}
if(flag) return -res;
return res;
}