leetcode -- 165. Compare Version Numbers

Compare two version numbers version1 and version2.
If version1 > version2 return 1; if version1 < version2 return -1;otherwise return 0.

You may assume that the version strings are non-empty and contain only digits and the . character.

The . character does not represent a decimal point and is used to separate number sequences.

For instance, 2.5 is not "two and a half" or "half way to version three", it is the fifth second-level revision of the second first-level revision.

You may assume the default revision number for each level of a version number to be 0. For example, version number 3.4 has a revision number of 3 and 4 for its first and second level revision number. Its third and fourth level revision number are both 0.

 

Example 1:

Input: version1 = "0.1", version2 = "1.1"
Output: -1
Example 2:

Input: version1 = "1.0.1", version2 = "1"
Output: 1
Example 3:

Input: version1 = "7.5.2.4", version2 = "7.5.3"
Output: -1
Example 4:

Input: version1 = "1.01", version2 = "1.001"
Output: 0
Explanation: Ignoring leading zeroes, both “01” and “001" represent the same number “1”
Example 5:

Input: version1 = "1.0", version2 = "1.0.0"
Output: 0
Explanation: The first version number does not have a third level revision number, which means its third level revision number is default to "0"
 

Note:

Version strings are composed of numeric strings separated by dots . and this numeric strings may have leading zeroes.
Version strings do not start or end with dots, and they will not be two consecutive dots.

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/compare-version-numbers
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 

 

我的思路:

1、把版本号进行拆分,subA记录A的拆分,subB记录B的拆分

2、在短的版本号后面不停填0,然后进行判断,用到了stoi函数

class Solution {
public:
    int compareVersion(string version1, string version2) {
        vector<string> subA, subB;
        int len = 0,startPos = 0;
        for(int i = 0; i < version1.size(); i++){
            if(version1[i] != '.'){
                len++;
            }
            if(version1.size() == 1 || version1[i] == '.' || i == version1.size()-1){
                string s = version1.substr(startPos, len);
                subA.push_back(s);
                len = 0;
                startPos = i+1;
            }
            
        }
        len = 0, startPos = 0;
        for(int i = 0; i < version2.size(); i++){
            if(version2[i] != '.'){
                len++;
            }
            if(version2.size() == 1 || version2[i] == '.' || i == version2.size()-1){
                string s = version2.substr(startPos, len);
                subB.push_back(s);
                len = 0;
                startPos = i+1;
            }
        }
        int lena = subA.size(), lenb = subB.size();
        int maxlen = max(lena, lenb);
        if(lena < lenb){
            int k = lenb - lena;
            for(int i = 0; i < k; i++){
                subA.push_back("0");
            }
        }else if(lena > lenb){
            int k = lena - lenb;
            for(int i = 0; i < k; i++){
                subB.push_back("0");
            }
        }
        for(int i = 0; i < maxlen; i++){
            if(stoi(subA[i]) > stoi(subB[i])) return 1;
            else if(stoi(subA[i]) < stoi(subB[i])) return -1;              
        } 
        return 0;
    }
};

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值