Leetcode 165. 比较版本号

文章提供了两段C++代码,分别用于解决LeetCode第165题——比较两个版本号。代码通过处理字符串,提取每个版本号的数字部分进行比较,利用了迭代器和atoi函数。在二刷的代码中,使用了更简洁的循环结构来实现相同功能。
摘要由CSDN通过智能技术生成

题目

在这里插入图片描述
Leetcode 165. 比较版本号

代码(首刷看解析)

class Solution {
public:
    int compareVersion(string version1, string version2) {
        int start1 = 0, size1 = version1.size();
        int start2 = 0, size2 = version2.size();
        version1 += '.';
        version2 += '.';
        while(start1 < size1 || start2 < size2) {
            int next1 = find(version1.begin() + start1, version1.end(), '.') - version1.begin();
            int next2 = find(version2.begin() + start2, version2.end(), '.') - version2.begin();

            int s1 = atoi(&*version1.begin() + start1);   // 自动去除后面不规则的字符串 加号优先级更高
            int s2 = atoi(&*version2.begin() + start2);   
            if(s1 == s2) {
                start1 = next1 + 1;    // 移动到下一个 '.'后面的数字
                start2 = next2 + 1;
            } else {
                return s1 > s2 ? 1 : -1;
            }
        }
        return 0;
    }
};

总结:

  1. 掌握atoi,这个函数可以自动去除后面不规则的字符串,去除前置0。
  2. 掌握iterator之间的运算。

代码(8.13 二刷看解析)

func compareVersion(version1 string, version2 string) int {
    m, n := len(version1), len(version2)
    i, j := 0, 0
    for i < m || j < n {
        x, y := 0, 0
        for ; i < m && version1[i] != '.'; i++ {
            x = x*10 + int(version1[i]-'0')
        }
        i++
        for ; j < n && version2[j] != '.'; j++ {
            y = y*10 + int(version2[j]-'0')
        }
        j++
        if x > y {
            return 1
        } else if x < y {
            return -1
        }
    }
    return 0
}
class Solution {
public:
    int compare(string version1, string version2) {
        int i = 0, j = 0;
        int m = version1.size(), n = version2.size();
        version1 += '.';
        version2 += '.';
        while(i < m || j < n) {
            int next1 = find(version1.begin() + i, version1.end(), '.') - version1.begin();
            int next2 = find(version2.begin() + j, version2.end(), '.') - version2.begin();
            int sub1 = atoi(&*(version1.begin()+i));
            int sub2 = atoi(&*(version2.begin()+j));
            if(sub1 == sub2) {
                i = next1 + 1;
                j = next2 + 1;
            } else {
                return sub1 > sub2 ? 1 : -1;
            }
        }
        return 0;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值