leetcode 7 整数翻转

选了个先转换成字符串,然后再翻转的做法,虽然效率不差,但属实有点拉,贴代码

class Solution {
public:
    char* inttoString(int a,char* b)
    {
        int t = a/10;
        if(t!=0)
        {
            b = inttoString(a/10,b) +1;
        }
        *b = a%10 + '0';
        return b;
    }
    int reverse(int x) 
    {
        if(x == -2147483648)
        return 0;
        bool fu = false;
    //  long t = x;
        if(x<0)
        {
            fu = true;
            x = -x;       
        }
        char a[20];
        memset(a,'\0',sizeof(a));
        inttoString(x,a);
        int i = 0;
        while(a[i]!='\0')
        {
            i++;
        }
        long k = 0;
        for(int j = i-1 ; j>=0 ; j--)
        {
            k = (a[j]-'0') + k*10;
            if(k>(pow(2,31)-1))
            return 0;
        }
        if(fu)
        k = -k;
        return k;
    }
};

还有一种方法,直接通过取余的方式求出当前最小一位数,然后将x除以10,算是比较巧妙的方法,就是两个边界条件,需要进行计算,贴代码

class Solution {
public:
    int reverse(int x) 
    {
        int rec = 0;
        while(x!=0)
        {
            int pop = x%10;
            x = x/10;
            if(rec>INT_MAX/10 || (rec ==INT_MAX/10 && pop == 7 ))
            return 0;
            if(rec<INT_MIN/10 || (rec ==INT_MIN/10 && pop == -8 ))
            return 0;
            rec = rec*10 + pop;
        }
        return rec;
    }
};

 

posted @ 2021-03-07 18:37  zhaohhhh  阅读(42)  评论(0)    收藏  举报