题解 | #反转数字#
反转数字
http://www.nowcoder.com/practice/1a3de8b83d12437aa05694b90e02f47a
反转数字
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
输入:12
返回值:21
方法一 数学模拟
对数字每次进行%10运算重新翻转,之后再判断界限与符号即可, 翻转后的数可以用long来存储方便后面判断范围
int reverse(int x) { // write code here int a = x; if(a < 0) a *= -1; long ans = 0; while(a){ //遍历数字所有位 ans *= 10; ans += a % 10; a /= 10; } if( ans < -(long)((long)1 << (long)31) || ans >= ((long)((long)1 << (long)31) )) return 0; //判断范围 if(x < 0) ans *= -1; //取负数符号 return (int)ans; }
时间复杂度: O(n) 遍历一遍数字的长度
空间复杂度: O(1) 若干个变量
方法二 使用java字符串操作
将其转换成string进行翻转操作
public int reverse (int x) { // write code here boolean fase = false; if(x < 0 ) { //判断x是否位负数 fase = true;x *= -1; } String a = new StringBuffer(String.valueOf(x)).reverse().toString();//转成字符串并翻转 long s = Long.valueOf(a).longValue(); if( ( -((long)1 << 31) - 1) <= s &&s <= ( ((long)1 << 31) - 1)){ //判断范围 if(fase) return (int)s * -1; return (int)s; } return 0; }
时间复杂度: O(n) 使用reverse进行字符串翻转,reverse复杂度为O(n)
空间复杂度: O(n) 存储数字的字符串,长度为数字的长度