题目
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321示例 2:
输入: -123
输出: -321示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [?231, 231 ? 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
普遍的思路,新建一个数组反过来存,简单除暴,但是效率和内存消耗大
class Solution {
public int reverse(int x) {
if(x == 0 || x<-2147483648 || x>2147483647){
return 0;} char[] str = Integer.toString(x).toCharArray();char[] newStr;if(x < 0){
newStr = new char[str.length];newStr[0] = '-';for(int i = 1;i < str.length ;i++){
newStr[i] = str[str.length - i]; } }else{
if(str[str.length-1] == '0'){
newStr = new char[str.length - 1];for(int i = 0;i < str.length-1 ;i++){
newStr[i] = str[str.length - i - 2];} }else{
newStr = new char[str.length];for(int i = 0;i < str.length ;i++){
newStr[i] = str[str.length - i - 1];}}}Long y = Long.parseLong(String.valueOf(newStr));if( y<-2147483648 || y>2147483647){
return 0;}return Integer.parseInt(Long.toString(y));}
}
结果
结果可以看出,虽然解决了问题但是效率并不客观。
经过研究和思考,下面的方法更好,我们要考虑一下怎么取最后一个数字
例如:12345 怎么取5 ==> 1234怎么取4 ==> 123 怎么取3
由图可见:我们取模就可以了,可以看出代码简洁了很多。
class Solution {
public int reverse(int x) {
//方法二int res = 0;while(x!=0) {
//每次取末尾数字int tmp = x%10;if (res>214748364 || res<-214748364) {
return 0;}res = res*10 + tmp;x /= 10;}return res; }
}
具体的执行逻辑:
x=12345
第一次:tmp = 5 res = 5 x = 1234
第二次:tmp = 4 res = 54 x = 123
第三次:tmp = 3 res = 543 x = 12
第四次:tmp = 2 res = 5432 x = 1
第五次:tmp = 1 res = 54321 x = 0
运行结果
结果的确让人很满意