LeetCode刷题日记(Day6)— Math

LeetCode 7.Reverse Integer

int reverse(int x) {
    if(x == 0) return 0;
    bool belowZero = x < 0 ? true : false;   

    long long num = x;
    string str = to_string(abs(num));
    std::reverse(str.begin(), str.end());
    str.erase(0,str.find_first_not_of("0"));

    stringstream ss(str);
    ss >> num;
    if(belowZero) num = 0-num;
    if(num < INT_MIN || num > INT_MAX) return 0;
    return num;
}

使用字符串实现,注意越界的问题,正负数的问题。

int reverse(int x) {
    int res = 0;
    while(x != 0) {
        if(res <= INT_MAX / 10 && res >= INT_MIN / 10)
            res = res * 10 + x % 10;
        else
            return 0;
        x /= 10;
    }
    return res;
}

另一种实现,直接使用int

 

LeetCode 165. Compare Version Numbers

def compareVersion(self, version1: 'str', version2: 'str') -> 'int':
    v1 = [int(x) for x in version1.split('.')]
    v2 = [int(x) for x in version2.split('.')]

    base = 1
    if len(v1) > len(v2):
        v1, v2 = v2, v1
        base = -1

    for i in range(len(v1)):
        if v1[i] < v2[i]:
            return -1*base
        elif v1[i] > v2[i]:
            return 1*base

    for i in range(len(v1), len(v2)):
        if v2[i] != 0:
            return -1*base

    return 0

思路:利用转换成int 的方法,消除前导0的影响,进行交换使得长度短的版本号在前,之后再检查即可。

def compareVersion(self, version1: 'str', version2: 'str') -> 'int':
    v1 = [int(v) for v in version1.split('.')]
    v2 = [int(v) for v in version2.split('.')]  
    
    for i in range(max(len(v1), len(v2))):
        sub_v1 = v1[i] if i < len(v1) else 0
        sub_v2 = v2[i] if i < len(v2) else 0
        if sub_v1 > sub_v2:
            return 1
        elif sub_v1 < sub_v2:
            return -1
    
    return 0

优化版本:不用交换,直接用 sub_v1 = v[i] if i < len(v1) else 0

 

LeetCode 66. Plus One

vector&
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值