当前位置: 代码迷 >> 综合 >> Letcode--整数反转
  详细解决方案

Letcode--整数反转

热度:33   发布时间:2023-11-22 15:41:51.0

题目

给出一个 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
运行结果

在这里插入图片描述
结果的确让人很满意